1040. Longest Symmetric String (25)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue
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
题目不算难,感觉自己处理复杂了,reverse这个函数一用难度就减半了。自己的有两个测试点过不了,感觉挺简单,就没继续深究。贴一个自己的,贴一个网上参考的。
网上参考的:
#include <iostream>
#include <string>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#include <stack>
#include <map>
using namespace std;
int main(){
string str;
getline(cin,str);
int max = -1;
int lenStr = (int)str.size();
for (int i=0; i<lenStr; ++i) {
for (int j=lenStr-1; j>=i; --j) {
if(j-i+1<=max)
break;
string t1,t2 ;
t1 = str.substr(i,j-i+1);
t2 = t1;
reverse(t2.begin(),t2.end());
if(t2==t1){
int len =(int)t1.size();
if(len>max)
max = len;
}
}
}
printf("%d\n",max);
return 0;
}
自己的版本:
#include<iostream>
#include<fstream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
//ifstream fin("Text.txt");
string str;
char c;
int len;
int max;
int i, j, flag;
getline(cin, str);
if (str.size() == 1)
{
cout << 1;
return 0;
}
if (str.size() == 2)
{
if (str[0] == str[1])cout << 2;
else cout << 0;
return 0;
}
i = 2; flag = 0; max = 0;
while (i<str.size())
{
if (flag == 0)
{
if (str[i] == str[i - 1])
{
flag = 1;
j = i - 1;
len = 2;
}
else if (str[i] == str[i - 2])
{
flag = 1;
j = i - 2;
len = 3;
}
else;
}
else
{
j--;
if (j < 0)
{
max = max < len ? len : max;
break;
}
if (str[i] == str[j])
{
len += 2;
}
else
{
max = max < len ? len : max;
flag = 0;
len = 0;
}
}
i++;
}
cout << max;
//cin.get();
return 0;
}