L2-008. 最长对称子串

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 } 
原文地址:https://www.cnblogs.com/ledoc/p/6610067.html