Given a string, you are supposed to output the length of the longest symmetric sub-string. For example, given “Is PAT&TAP symmetric?”, the longest symmetric sub-string is “s PAT&TAP s”, hence you must output 11.
Input Specification:
Each input file contains one test case which gives a non-empty string of length no more than 1000.
Output Specification:
For each test case, simply print the maximum length in a line.
Sample Input:
Is PAT&TAP symmetric?
Sample Output:
11
暴力法:分两种情况 1)最长回文串长度为奇数:以字符串中的所有单个字符串为中心,往两边扩散找最长的;2)最长回文串长度为偶数:以字符串中出现的成对字符串为中心,往两边扩散找最长的。
此题还可以用动态规划法:http://blog.csdn.net/tuzigg123/article/details/47053481
#include <iostream>
using namespace std;
#include <string>
int main(){
string str;
getline(cin,str);//注意事项:有空格要用getline
int maxLen=0;
int currentLen=0;
int j=0;
/*奇数的情况*/
for(int i=0;i<str.length();i++){
currentLen=1;
j=1;
while(i-j>=0&&i+j<str.length()){
if(str[i+j]==str[i-j]) {
currentLen+=2;
j++;
}
else break;
}
if(currentLen>maxLen) maxLen=currentLen;
}
/*偶数的情况*/
for(int i=0;i<str.length()-1;i++){
if(str[i]!=str[i+1]) continue;
currentLen=2;
j=1;
while(i-j>=0&&i+1+j<str.length()){
if(str[i-j]==str[i+1+j]) {
currentLen+=2;
j++;
}
else break;
}
if(currentLen>maxLen) {
maxLen=currentLen;
}
}
cout<<maxLen;
return 0;
}