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;
}

 

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