zoukankan      html  css  js  c++  java
  • 最大回文子串

     public static String longestPalindrome1(String s) {
            int startAndEnd[] = new int[2];
    
            for (int i = 0; i < s.length(); i++) {
                getMaxSubStr(s, startAndEnd, i, i);//
                getMaxSubStr(s, startAndEnd, i, i + 1);//
            }
            return s.substring(startAndEnd[0], startAndEnd[1]);
        }
    
        private static void getMaxSubStr(String s, int[] startAndEnd, int start, int end) {
            for (; start >= 0 && end < s.length() && s.charAt(start) == s.charAt(end); ) {
                start--;
                end++;
            }
            if (end - start - 1 > startAndEnd[1] - startAndEnd[0] + 1) {
                startAndEnd[0] = start + 1;
                startAndEnd[1] = end;//前包后不包
            }
        }
     public String longestPalindrome(String s) {
            int len = s.length();
            if (len < 2) {
                return s;
            }
            int maxLen = 1;
            String res = s.substring(0, 1);
            // 中心位置枚举到 len - 2 即可
            for (int i = 0; i < len - 1; i++) {
                String oddStr = centerSpread(s, i, i);
                String evenStr = centerSpread(s, i, i + 1);
                String maxLenStr = oddStr.length() > evenStr.length() ? oddStr : evenStr;
                if (maxLenStr.length() > maxLen) {
                    maxLen = maxLenStr.length();
                    res = maxLenStr;
                }
            }
            return res;
        }
    
        private String centerSpread(String s, int left, int right) {
            // left = right 的时候,此时回文中心是一个字符,回文串的长度是奇数
            // right = left + 1 的时候,此时回文中心是一个空隙,回文串的长度是偶数
            int len = s.length();
            int i = left;
            int j = right;
            while (i >= 0 && j < len) {
                if (s.charAt(i) == s.charAt(j)) {
                    i--;
                    j++;
                } else {
                    break;
                }
            }
            // 这里要小心,跳出 while 循环时,恰好满足 s.charAt(i) != s.charAt(j),因此不能取 i,不能取 j
            return s.substring(i + 1, j);
        }
  • 相关阅读:
    软工实践个人总结
    第05组 每周小结 (3/3)
    第05组 每周小结 (2/3)
    第05组 每周小结 (1/3)
    第05组 Beta冲刺 总结
    第05组 Beta冲刺 (5/5)
    第05组 Beta冲刺 (4/5)
    第六次作业
    第05组 Beta冲刺 (3/5)
    第05组 Beta冲刺 (2/5)
  • 原文地址:https://www.cnblogs.com/zzq-include/p/13457180.html
Copyright © 2011-2022 走看看