leetcode--5--最长回文子串

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

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

链接:https://leetcode-cn.com/problems/longest-palindromic-substring

思路:
1、这道题可以采用中心拓展法,即从一个中心向两边进行拓展,确保找到满足条件的最长的回文子串
2、这里定义了一个expand函数来进行中心拓展,分别往两边进行拓展,从而找到最长的回文串
3、这里用了一种很巧妙的方法,按照奇偶的方式对字符串的每一次迭代进行中心拓展

Python代码:

class Solution(object):

    def expand(self, s, i, j):
        while (i>=0 and j<len(s) and s[i]==s[j]):
            i-=1
            j+=1
        return s[i+1:j]

    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        if len(s)==0:
            return ""
        
        ret = s[0]

        for i in range(len(s)):
            odd = self.expand(s,i,i)
            even = self.expand(s,i,i+1)
            ret = max(odd,even,ret,key=len)
        return ret

C++代码:

class Solution {
public:

    string expand(string s, int i, int j){
        while(i>=0 && j<s.size() && s[i]==s[j]){
            i -= 1;
            j += 1;
        }
        return s.substr(i+1, j-i-1);
    }

    string longestPalindrome(string s) {
        if(s.size()==0) return "";

        string ret = s.substr(0, 1); // 由于ret需要定义成string类型,所以这里需要用substr来获取第一个字符
        for (int i=0; i<s.size(); i++){
            string odd = expand(s, i, i);
            string even = expand(s, i, i+1);
            if (odd.size() > ret.size()){
                ret = odd;
            }
            if (even.size() > ret.size()){
                ret = even;
            }
        }
        return ret;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入:...
    hbhey阅读 197评论 0 0
  • Time: 2019-08-05 题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大...
    钢笔先生阅读 104评论 0 0
  • 每每看到建筑物,脑海里就会浮现古典建筑,那不仅是艺术,更是凝固的音乐。我特别喜欢欣赏那些中国风,觉得那里蕴...
    段子浪阅读 866评论 5 4
  • 还记得你曾经的模样吗?天真彷徨。你看到你现在的模样了吗?辛酸刻薄。我们到底是因为什么变成了这样。 从来不去批判某...
    如故长风来阅读 610评论 0 0
  • 转义字符 \ 可以转义很多字符,比如 \n 表示换行, \t 表示制表符,字符 \本身也要转义,所以 \ 表示的字...
    Oneshot_fea8阅读 579评论 0 0

友情链接更多精彩内容