给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

package leetCode;
/*
 * 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:

输入: "cbbd"
输出: "bb"
 */
public class Question5 {
    public String longestPalindrome(String s) {
        //每个字符与每个字符之间加上一个特殊字符
        StringBuffer sBuffer=new StringBuffer();
        sBuffer.append('$');
        for(int i=0;i<s.length();i++) {
            sBuffer.append(s.charAt(i));
            sBuffer.append('$');
        }
        String string =sBuffer.toString();
//        System.out.println(string);
        int store[]=new int[string.length()];
        store[0]=store[string.length()-1]=1;
        for(int i=1;i<string.length()-1;i++) {
            int temp=1;
            //for循环保证了向前索引不超过数组限界
            for(int j=i-1;j>=0;j--) {
                //if判断保证了向后索引不超过数组限界
                if(2*i-j<string.length()) {
                    if(string.charAt(j)==string.charAt(i+i-j)) {
//                        System.out.println(string.charAt(j)+"="+string.charAt(i)+"="+string.charAt(i+i-j));
                        temp+=2;
                    }else {
                        //如果一旦其中有一个字符判断失败,也就不继续向下判断
                        break;
                    }
                }else {
                    break;
                }
            }
            //把以每个字符为中心向左向右扩展的最大范围保存入store数字
            store[i]=temp;
        }
//        for(int i:store) {
//            System.out.print(i+" ");
//        }
        //找出最大的索引值
        int index=0;
        int max=store[0];
        for(int i=1;i<store.length;i++) {
            if(store[i]>=max) {
                max=store[i];
                index=i;
            }
        }
        //输出所有为索引值为最大的回文字串
        StringBuffer result=new StringBuffer();
//        for(int i=0;i<store.length;i++) {
//            if(store[i]==max) {
                for(int j=index-store[index]/2;j<index+store[index]/2;j++) {
                    if(string.charAt(j)!='$'){
                        result.append(string.charAt(j));
                    }
                }
//                System.out.println();
//            }
//        }
        return result.toString();
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(new Question5().longestPalindrome("babad"));
    }

}
 

猜你喜欢

转载自blog.csdn.net/Is_ever/article/details/88941512