题目链接:http://www.patest.cn/contests/pat-a-practise/1040
题目:
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
分析:
找到一个字符串的最长回文子串,那个时候还不知道kmp,manacher,用比較搓的方法做出来的。
AC代码:
#include<stdio.h> #include<iostream> #include<algorithm> #include<string> using namespace std; int main(){ //freopen("F://Temp/input.txt", "r", stdin); string str; string str_r; getline(cin,str); str_r = str; reverse(str_r.begin(),str_r.end()); //included in the <algorithm> //先把字符串逆序。然后比較正序和逆序中同样的部分,即为最长回文子串 int same = 0, sum = 0; for (int i = 0; i < str.size(); i++){ sum = 0; for (int j = 0, rj = i; j < str.size() - i; j++,rj ++){ if (str_r[rj] == str[j]){ sum++; if (sum > same)same = sum; } else sum = 0; } sum = 0; for (int j = 0, rj = i; j < str.size() - i; j++, rj++){ if (str_r[j] == str[rj]){ sum++; if (sum > same)same = sum; } else sum = 0; } } cout << same << endl; return 0; }
截图:
——Apie陈小旭