天天看點

求取一個字元串的最大回文子串

什麼是回文字元串?

即為一個字元串從左往右讀和從右往左讀,結果一樣。例如字元串“aba”就是一個回文字元串。

1.問題描述(在牛客網刷題遇到的一個問題):在一個字元串的開始或者結尾加入無關字元。比如進行下列變化 ABBA->12ABBA,ABA->ABAKK,123321->51233214。求字元串的最大回文子串中字元的個數!

2.思路分析:本   題實際在求字元串的最大回文子串。可利用動态規劃的思想。代碼如下:

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String a = sc.next();
            int len = a.length();
            //建立一個二維數組
            int arr[][] = new int[len+1][len+1];
            StringBuffer sb = new StringBuffer(a);
            StringBuffer b = sb.reverse();//反轉之後的字元串
            int max = 0;
            for(int i=1;i<=len;i++){
                for(int j=1;j<=len;j++){
                    if(a.charAt(i-1)==b.charAt(j-1)){
                        arr[i][j] = arr [i-1][j-1]+1;
                    }
                    if(arr[i][j]>max){
                        max=arr[i][j];
                    }
                }
            }
            System.out.println(max);
        }
    }
}
      

PS:第一次寫部落格,希望對大家有幫助。如有可改進的地方,歡迎交流!

繼續閱讀