1040 Longest Symmetric String (25)(25 分)
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
思路:
分别枚举子串开始的位置和子串的长度,需要注意的是子串对应位置下标的计算,假设开始位置为start,长度为len,与s[i]对应的字符是s[start+len-1-(i-start)],画个示意图很容易就算出来了。
代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cctype>
#include <climits>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
using namespace std;
bool symmetric(string s, int start, int len)
{
for (int i = start; i < start + len / 2; i++)
{
if (s[i] != s[start + len - 1 - (i - start)])
return false;
}
return true;
}
int main()
{
string s;
getline(cin, s);
int maxlen = 1;
for (int i = 0; i < s.length(); i++)
{
for (int j = 1; j <= s.length() - i; j++)
{
if (symmetric(s, i, j) && j > maxlen)
maxlen = j;
}
}
cout << maxlen << endl;
return 0;
}