PTA L2-008 最长对称子串(巨简单做法)
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
思路:首先将输入的字符串反转,然后判断两个字符串最长的连续序列就可以了,然后取最大值即可。算法时间复杂度O(n2).
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e3+10;
int dp[maxn][maxn];
int main()
{
string s,s1;
getline(cin,s);
s1=s;
int ans=0;
reverse(s.begin(),s.end());
for(int i = 1; i <= s1.size(); i++)
{
for(int j = 1; j <= s.size(); j++)
{
if(s1[i-1] == s[j-1])
{
dp[i][j] = dp[i - 1][j - 1] + 1;
ans = max(ans, dp[i][j]);
}
}
}
cout << ans << endl;
return 0;
}