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);
        }
  • 相关阅读:
    Python常用第三方库总结
    Python爬虫技术--入门篇--爬虫介绍
    X sql解惑 25 里程碑问题 答案
    X sql解惑 34 咨询顾问收入问题
    从小变大的照片
    获取属性的顺序
    for...in
    判断元素是否存在
    自由的元素名称
    ES6语法糖-简洁属性表示
  • 原文地址:https://www.cnblogs.com/zzq-include/p/13457180.html
Copyright © 2011-2022 走看看