L2-008. 最长对称子串
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&TAP s",于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
分析:从第一个字符开始,向左向右check(偶串和奇数串都要讨论一下)
1 #include<bits/stdc++.h> 2 using namespace std; 3 int len, l=1; 4 5 //不同指针,直接用变量i j去表示下标就好了 6 void solve(char* s){ 7 int len=strlen(s); 8 int i, j; 9 for(i=0; i<len; i++){ 10 //奇数 --即这个回文串可能是奇数串 11 for(j=0; i+j<len&&i-j>=0; j++){ 12 if(s[i-j]!=s[i+j]) break; 13 if(2*j+1>l) l=2*j+1; 14 } 15 //偶数 --即这个回文串可能是偶数串 16 for(j=0; i+j+1<len&&i-j>=0; j++){ 17 if(s[i-j]!=s[i+1+j]) break; 18 if(2*j+2>l) l=2*j+2; 19 } 20 } 21 cout<<l<<endl; 22 } 23 int main(){ 24 char str[1002]; 25 gets(str); //get新技能 26 solve(str); 27 28 return 0; 29 }