c_cpp 给定一个字符串S,找到S中最长的回文子字符串。您可以假设S的最大长度为1000,并且存在一个单一的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 给定一个字符串S,找到S中最长的回文子字符串。您可以假设S的最大长度为1000,并且存在一个单一的相关的知识,希望对你有一定的参考价值。

string longest_palindrome(const string& s) {
    if(s.empty()) return "";
    int N = s.size();
    int max_len = 1, start = 0;  // gist, start should be initialized. otherwise, "a" will have error
    for(int i=0; i<N; ++i) {    // should be N not N-1
        int j = i, k = i;
        while(j >= 0 && k < N) {
            if(s[j] != s[k]) break;
            if(max_len < k-j+1) {
                max_len = k-j+1;
                start = j;
            }
            j--;
            k++;
        }
        j = i; k = i+1;
        while(j >= 0 && k < N) {
            if(s[j] != s[k]) break;
            if(max_len < k-j+1) {
                max_len = k-j+1;
                start = j;
            }
            j--;
            k++;
        }
    }
    return s.substr(start, max_len);
}

以上是关于c_cpp 给定一个字符串S,找到S中最长的回文子字符串。您可以假设S的最大长度为1000,并且存在一个单一的的主要内容,如果未能解决你的问题,请参考以下文章

最长回文子串

5. 最长回文子串

[LeetCode] 最长回文子串

最长回文子串

最长回文子串 (动态规划法中心扩展算法)

最长回文子序列