5.Longest Palindromic Substring

来源:互联网 发布:mysql脚本自动生成id 编辑:程序博客网 时间:2024/06/10 19:37

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example:

Input: “babad”

Output: “bab”

Note: “aba” is also a valid answer.

给定一个字符串,找出它的最长回文子串。假设字符串的最长长度为1000.

上代码:

string LongestPalindromicSubstring::longestPalindrome(string s){    // 处理特殊情况    if (s.empty()) return "";    if (s.size() == 1) return s;    int start = 0, maxLen = 1;    for (int i = 0; i < s.size();)    {        // 从下标元素i开始向两侧扩张,若满足以下条件,则至此之后的回文长度不会超过现有长度        if (s.size() - i < maxLen / 2) break;        int j = i, k = i;        // 从非相同元素开始向两侧扩张        while (k < s.size() - 1 && s[k + 1] == s[k]) ++k;        i = k + 1;        while (j > 0 && k < s.size() - 1 && s[k + 1] == s[j - 1])        {            ++k;            --j;        }        int newLen = k - j + 1;        if (newLen > maxLen)        {            start = j;            maxLen = newLen;        }    }    return s.substr(start, maxLen);}

测试代码:

LongestPalindromicSubstring longestPalindromicSubstring;string s = "aaabbbaaacdefg";string result = longestPalindromicSubstring.longestPalindrome(s);cout << result << "\n";cout << endl;