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

    题目:最长回文子串

    问题描述:

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

    解决思路:

    本题可以采用中心扩展算法:顾名思义,由于回文串具有中心对称的性质,所以我们可以根据字符串中的某一个字符开始分别向左向右扩展,直到找到不相等的字符为止,这样得到的字符串即是能够得到的最长回文串。

    我们应该注意,当回文串的长度是偶数时,中心有n-1个;而当回文串的长度是奇数时,中心就有n个(n为回文串的长度):

    解决代码:

    
    class Solution {
        public static String longestPalindrome(String s) {
            if (s.length() < 2) {
                return s;
            }
    
            // 最长回文子串长度
            int maxLen = 0;
            // 回文子串中心
            int center = 0;
            for (int i = 0; i < s.length(); i++){
                // 最长回文串长度为奇数
                int begin = centerExpand(s, i, i);
                // 最长回文串长度为偶数
                int end = centerExpand(s, i, i + 1);
    
                if (maxLen < Math.max(begin, end)){
                    center = i;
                    maxLen = Math.max(begin, end);
                }
            }
            // 如果回文子串的长度为偶数,那么中心左边的长度会比右边的长度小1
            return s.substring(center - (maxLen - 1) / 2, center + maxLen / 2 + 1);
        }
    
        private static int centerExpand(String s, int begin, int end){
            while (begin >= 0 && end < s.length() && s.charAt(begin) == s.charAt(end)){
                begin--;
                end++;
            }
            // 返回以begin和end为基准,同时向左向右扩展后能够得到的最长回文串长度
            return end - begin - 1;
        }
    }
    
  • 相关阅读:
    Servle生命周期
    Nginx反向代理
    redis
    java二分查找
    Redis集群的数据一致性
    springmvc中controller不要定义全局变量
    elasticsearch-6.7.1和kibana-oss-6.7.1的Linux安装
    centos7.0查看IP,Linux基本命令
    高并发ConcurrentHashMap 1.8的原理
    JS 循环 while for do while
  • 原文地址:https://www.cnblogs.com/syhyfh/p/13188153.html
Copyright © 2011-2022 走看看