leetcode进阶之路——Longest Palindromic Substring

这道题题意很简单,就是求给定字符串的最长回文子串
我的思路就是先找中心点,然后往两边扩展,直到出边界或不相等,然后记录本次回文串的长度,若比之前最长的长度要长,就修改原值,并记录当前的子串。
参考代码如下:

class Solution {
public:
    string longestPalindrome(string s) {
        string res = "";
        int len = s.length();
        int j = 0, k = 0, maxn = 0, tmp = 0;
        for(int i = 0; i < len; ++i)
        {
            for(j = i+1, k = i; j<len && k>=0 && s[j] == s[k]; ++j, --k);
            tmp = j-k-1;
            if(tmp > maxn) 
            {
                maxn = tmp;
                res = s.substr(k+1, tmp);
            }
            for(j = i, k = i; s[j] == s[k] && j<len && k>=0; ++j, --k);
            tmp = j-k-1;
            if(tmp > maxn) 
            {
                maxn = tmp;
                res = s.substr(k+1, tmp);
            }

        }
        return res;
    }
};

tmp是当前子串的长度,maxn是之前记录的最长子串的长度,初始化为0
由于子串可能是奇数长度,也可能是偶数长度,因此中心点可能是最中间的那个字符(奇数长),也可能是中间两个字符(偶数长),因此需要分两种情况讨论。

猜你喜欢

转载自blog.csdn.net/u013700358/article/details/61214708