给定一个字符串,找出该字符串的最长回文子串

题目

给定一个字符串,找出该字符串的最长回文子串。回文字符串指的就是从左右两边看都一样的字符串,如aba,cddc都是回文字符串。字符串abbacdc存在的回文子串有abba和cdc,因此它的最长回文子串为abba。

代码

public class LongPalindromic {

    public static void main(String[] args) {

        String str = "abcddccad";
        String result = getPalindromic(str);
        System.out.println(result);
    }

    private static String getPalindromic(String str) {

        char[] ch = str.toCharArray();
        String post = "";
        String result = "";
        //当回文字符串的长度为基数时
        for (int i = 0; i < ch.length; i++) {
            post = getSubstring(ch, i, i);
            if (post.length() > result.length()) {
                result = post;
            }
        }
        //当回文字符串的长度为偶数时
        for (int i = 0; i < ch.length; i++) {
            post = getSubstring(ch, i, i + 1);
            if (post.length() > result.length()) {
                result = post;
            }
        }

        return result;
    }

    private static String getSubstring(char[] ch, int i, int j) {

        //从指定位置向两边移动来判断是否满足回文数
        while(i >= 0 && j <= ch.length - 1 &&  ch[i] == ch[j]){
            i--;
            j++;
        }

        //当不满足条件的时候将不满足循环条件的上一个状态的字符串返回
        return String.valueOf(ch).substring(i + 1, j);
        //substring()方法方法用于提取字符串中介于两个指定下标之间的字符
        //当substring(2,3)返回位置为2下表的字符。
    }

}

你可能感兴趣的:(算法)