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(非动态规划) L2-008 最长对称子串 (25 分)_第1张图片

**解题思路:**我看网上大佬们都是用的动态规划,我只用了一个简单的二层循环就搞定了,虽然可能时间复杂度要高点,但是可以过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)
					max = b.length();
		}
	}
	cout << max;
	return 0;
}

你可能感兴趣的:(算法)