PTA团体天梯程序设计 L2-008 最长对称子串 (25 分)
L2-008 最长对称子串 (25 分)
原题地址:
https://pintia.cn/problem-sets/994805046380707840/problems/994805067704549376
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
**解题思路:**我看网上大佬们都是用的动态规划,我只用了一个简单的二层循环就搞定了,虽然可能时间复杂度要高点,但是可以过PTA的OJ了,然后说说算法,很简单,我就是穷举出这个字符串所有能组成的小字符串,然后分别判断他是不是回文串,用一个整形数据max来存最大的回文串的长度,如果当前的小串是回文串就比较长度就行了,大就覆盖掉,最后输出max的值就好了,下面是代码
#include"iostream"
#include"algorithm"
#include"string"
#include"cstring"
using namespace std;
int main()
{
string a;
int n;
getline(cin,a);
n=a.length();
int max=1;
for(int i=0;i<n;i++)
{
string b;
for(int j=i;j<n;j++)
{
b+=a[j];
string c=b;
reverse(c.begin(),c.end());//翻转字符串
if(c == b)//若翻转后等于翻转前,那么他就是回文串
{
if(b.length() > max)
{
//cout << b << endl;
max = b.length();
}
}
}
//cout << b << endl;
}
cout << max;
return 0;
}