题目
1040 Longest Symmetric String (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
题目大意
给出一个字符串,输出最长回文子串的长度
思路
每次从当前位置为中心,注意偶数长度和奇数长度的回文串的比较方式即可
代码
#include <bits/stdc++.h>
using namespace std;
int main(int argc, const char * argv[]) {
string s;
getline(cin, s);
int n = s.size(), maxlen = 0;
for(int i=0; i<n; i++){
int lens = 0;
for(; i+lens<n && i+lens>=0 && s[i+lens] == s[i-lens]; lens++);
maxlen = max(maxlen, 2*lens-1);
lens = 0;
for(; i-lens >=0 && i+lens+1<n && s[i-lens] == s[i+1+lens]; lens++);
maxlen = max(maxlen, 2*lens);
}
cout<<maxlen;
return 0;
}