LeetCode 5. Longest Palindromic Substring(C++)

问题:找字符串中的最长回文子串

思路:

设立两个标志pre和after从每个字符开始向左右两边查询,如果s[pre]!=s[after]或者超出范围,那么该字符出发的最长回文子串为s[pre+1,...,after-1]。

初始状态分别为pre=after=i和pre=i,after=i+1对应ABA和ABBA两种不同的回文情况。

遍历维护maxLen即可找到最长回文子串。


class Solution {
public:
    string longestPalindrome(string s) {
        int pre = 0,after = 0;
        int maxLen = 0;
        string result;
        for(int i=0;is.length()-1 || s[pre]!=s[after])
                {
                    if((after-1)-(pre+1)+1>maxLen)
                    {
                        maxLen = (after-1)-(pre+1)+1;
                        result = s.substr(pre+1,maxLen);//用下标pre+1开始,截取长度为maxLen的子串
                    }
                    break;
                }
                pre--;
                after++;
            }
        }
        for(int i=0;i=2;i++)
        {
            pre = i;
            after = i+1;
            while(1)
            {
                if(pre<0 || after>s.length()-1 || s[pre]!=s[after])
                {
                    if((after-1)-(pre+1)+1>maxLen)
                    {
                        maxLen = (after-1)-(pre+1)+1;
                        result = s.substr(pre+1,maxLen);//用下标pre+1开始,截取长度为maxLen的子串
                    }
                    break;
                }
                pre--;
                after++;
            }
        }
    return result;
    }
};


你可能感兴趣的:(LeetCode)