L2-008 最长对称子串 (25分)

题目描述:

对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。

输入格式:

输入在一行中给出长度不超过1000的非空字符串。

输出格式:

在一行中输出最长对称子串的长度。

输入样例:

Is PAT&TAP symmetric?

输出样例:

11
#include <iostream>

using namespace std;

int main()
{
    int maxLen = 0;
    int len, t;
    string s;
    
    getline(cin, s);
    
    len = s.length();
    for (int i = 0; i < len; i++){
        t = 1;
        for (int j = 1; j < len; j++){ // 假设周期串的长度为奇数
            if (i-j<0 || i+j>=len || s[i-j]!=s[i+j])
                break;
            t += 2;
        }
        maxLen = max(maxLen, t);
        t = 0;
        for (int j = 1; j < len; j++){ // 假设周期串的长度为偶数
            if (i-j+1<0 || i+j>=len || s[i-j+1]!=s[i+j])
                break;
            t += 2;
        }
        maxLen = max(maxLen, t);
    }
    
    cout << maxLen;
    
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章