天天看點

[創新工場]2014創新工場校園招聘之回文串修複

所謂回文,就是正序和倒序周遊結果一樣的字元串,比如'aba', 'abcdedcba'。實作一個方法pal(),輸入一個字元串,列印出以這個字元串為字首的一個回文。比如輸入'abc',pal()方法列印出'abcdcba'或'abcba';輸入'abcb',可以輸出'abcbcba'或'abcba'。如果可能,輸出盡量短的結果。

  以abcdc為例,以此為字首的回文有 'abcdccdcba', 'abcdcdcba','abcdcba',即在輸入的字元串後面添加字元,使之成為回文字元串

  方法一、最先想到的辦法就是把輸入的字元串倒序拼接在原字元串後面,如原字元串為'abcdc',倒序為'cdcba',拼接的結果為'abcdccdcba',然後不斷删除倒序的字元,拼接上去,判斷是否是回文,是,則輸出,不是,則繼續删除字元。比如:

           1)'abcdcdcba'是回文

           2)'abcdccba'不是回文

           3)'abcdcba'是回文

           最後一個是回文的字元串即未最短的回文字元串。

這樣的話,每次可能都求出幾個沒用的回文串,例如上面的'abcdcdcba'是回文,題目要求是求最短的回文串,是以我們從最短可能的回文串開始。

先判斷字元串本身是不是回文串,如果不是,一次添加字元,a,ba,cba,dcba,cdcba判斷。

若需要找最短的回文,則要求在原字元串後面新添的字元串長度盡量短。隻要在原字元串中找到某一位置,在此位置(含)後面全為回文,隻要把此位置前的字元倒序追加在原字元串後即可。故隻需要找出最前的該位置即可。