最大回文串

作者: 西5d | 来源:发表于2018-04-03 21:58 被阅读23次

给定一个字符串,找最大的连续回文字串,其中连续的定义是左侧依次递增,右侧依次递减,如 aba,符合条件,bcdefedcb符合条件,注意abba不符合。初看可能是用模式匹配或者KMP的算法,用这些应该也可以,但其实我们可以注意到,这里的字符是递增,递减的特殊关系,因此可以从第二个开始即i=1的位置,同时向他的两边找,找的数目记为j,从j=1开始;如果符合则继续找j++,否则退出j的循环,同时找的位置从i+j-1开始;注意向两边找的长度j的范围:
1.当i是在字符串前段,j <= i,即没有遍历到超过给定串的一半;
2.当i是在字符串后段,j<=(len-i -1),已经超过了一半;
以下是代码:

public class MaxIncrePalindromeLen {

    public static void main(String[] args) {
        String s1 = "abddabcbad";
        String s2 = "abcbcdd";
        String s3 = "cdefedcdefedcba";
        String s4 = "bcbefed";
        String s5 = "aba";
        String s6 = "aaaaaaaaba";

        System.out.println(maxLen(s1));
        System.out.println(maxLen(s2));
        System.out.println(maxLen(s3));
        System.out.println(maxLen(s4));
        System.out.println(maxLen(s5));
        System.out.println(maxLen(s6));
        System.out.println(maxLen("3"));
        System.out.println(maxLen("dd"));
        System.out.println(maxLen(null));
    }


    public static int maxLen(String str) {
        if (null == str || str.length() < 3) {
            return 0;
        }

        int max = 0;
        int len = str.length();
        for (int i = 1; i < len - 1; i++) {
            for (int j = 1; j <= ((i <= len / 2) ? i : (len - i - 1)); j++) {
                if (str.charAt(i - j) == (str.charAt(i) - j) && (str.charAt(i + j) == str.charAt(i) - j)) {
                    max = (2 * j + 1 > max) ? (2 * j + 1) : max;
                } else {
                    i = i + j - 1;
                    break;
                }
            }
        }

        return max;
    }
}

相关文章

  • 最大回文串

    给定一个字符串,找最大的连续回文字串,其中连续的定义是左侧依次递增,右侧依次递减,如 aba,符合条件,bcdef...

  • 字符串hash

    兔子和兔子 最大回文子串 kmp周期

  • manacher算法

    概念:求字符串的最大回文串1.先处理成偶数串2.回文半径3.回文半径最右边界,并记录最早中心位置 扩展题 给定一个...

  • 最大回文串长度

    时间复杂度O(N)

  • 最大回文子串

    1.暴力求解(Brute Force) O(n^3) 2.动态规划(Dynamic planning) O(n^2...

  • 最长回文子串

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

  • 算法---寻找最大回文子串

    给定一个字符串,寻找它的最大回文子串

  • LeetCode练手系列——最长回文子串

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

  • 最长回文子串

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

  • LeetCode-5-最长回文子串

    LeetCode-5-最长回文子串 题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长...

网友评论

    本文标题:最大回文串

    本文链接:https://www.haomeiwen.com/subject/olxhhftx.html