鏈接:https://pintia.cn/problem-sets/994805046380707840/problems/994805067704549376
題目:
對給定的字符串,本題要求你輸出最長對稱子串的長度。例如,給定Is PAT&TAP symmetric?
,最長對稱子串為s PAT&TAP s
,於是你應該輸出11。
輸入格式:
輸入在一行中給出長度不超過1000的非空字符串。
輸出格式:
在一行中輸出最長對稱子串的長度。
輸入樣例:
Is PAT&TAP symmetric?
輸出樣例:
11
思路:
遍歷字符串中的每個位置 在每個位置枚舉長度判斷此長度能否構成一個回文串 需要對長度的奇偶性分類討論
代碼:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <string> #include <cstring> #include <algorithm>
using namespace std; typedef long long ll; typedef unsigned long long ull; const int inf=0x3f3f3f3f; string s; int main(){ getline(cin,s); int len=s.length(); int ans=0; for(int i=0;i<len;i++){ for(int j=0;i-j>=0 && i+j<len;j++){ if(s[i-j]!=s[i+j]) break; ans=max(ans,j*2+1); } for(int j=0;i-j>=0 && i+j+1<len;j++){ if(s[i-j]!=s[i+j+1]) break; ans=max(ans,j*2+2); } } printf("%d\n",ans); return 0; }