Notes
- 找到第一个相等的
- 找到最后一个相等的
- 前后同时对称扫描,若前扫描点>后扫描点 或者 发现其中一个不对称,则break
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
- 代码长度限制 16 KB 时间限制 200 ms 内存限制 64 MB
1.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string s, str;
int Error, maxN = 1, v, w, len = 0, flag = 0;
while(cin >> s)
{
str += (' ' + s);
if(getchar() == '\n') break;
}
len = str.length();
for(int i=1; i<len-1; i++)
for(int j=i+1; j<len; j++)
{
Error = 0;
if(str[i] == str[j])
{
flag = (j-i)%2;
for(v=i+1, w=j-1; v<w; v++, w--)
if(str[v] != str[w])
{
Error = 1;
break;
}
if(!Error)
if(!flag) maxN = max((v-i)*2+1, maxN);
else maxN = max((v-i)*2, maxN);
}
}
cout << maxN << endl;
return 0;
}