ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

最长回文字符串

2022-02-08 23:03:06  阅读:150  来源: 互联网

标签:right String length longest 中心点 字符串 left 最长 回文


什么是回文子串

回文子串,就是正着读和反正读是一样的字符串,比如 “上海自来水来自海上”

发音

palindrome 回文的
[ˈpælɪndroʊm]

解法

有3个解法

  1. 暴力解法 O(n^3)
  2. Manacher’s Algorithm O(n)
  3. 中心点枚举法 O(n^2)
  4. 动态规划 O(n^2)

中心点枚举法

使用双指针解答
分为两种情况

  1. 中心点是偶数
  2. 中心点是奇数

偶数

eab|bac 
012 345
    L R

偶数的情况下可以明确看到中心点是2和3中间的空隙。这个情况下
[i,i+1]

奇数

eabbace
0123456
 (LR)

奇数的情况下可以看到中心点是index = 3

题解

class Solution {
    public String longestPalindrome(String s) {
        // 异常
        if (null == s) {
            return null;
        }

        String longest = "";
        for (int i = 0; i < s.length(); i ++) {
            String odd = isPalindrome(s, i, i);

            if (longest.length() < odd.length()) {
                longest = odd;
            }

            String even = isPalindrome(s, i, i + 1);
            
            if (longest.length() < even.length()) {
                longest = even;
            }
        }

        return longest;
    }

    public String isPalindrome(String s, int left, int right) {

        while (left >= 0 && right < s.length()) {
            if (s.charAt(left) != s.charAt(right)) {
                // 左右指针不相等的话,表示不是回文字符串
                break;
            }

            left--;
            right++;
        }

        return s.substring(left + 1, right);
    }
}

标签:right,String,length,longest,中心点,字符串,left,最长,回文
来源: https://www.cnblogs.com/amberbar/p/15873210.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有