PTA最长对称子串
这题我混淆了最长公共子序列和最长公共子串。。。
重新看一遍题才发现求最长子串。。我一直以为是最长子序列。。
所以这题的dp递推式是dp[i + 1][j + 1] = dp[i][j] + 1; (当s[i] == t[j]时)。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
const int maxn = 1000 + 5;
int dp[maxn][maxn];
int main()
{
string s1;
getline (cin, s1);
string s2 = s1;
reverse (s1.begin(), s1.end()); //字符串翻转函数
int len = s1.length(), ans = -1e9 - 7;
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
if (s1[i] == s2[j]) dp[i + 1][j + 1] = dp[i][j] + 1;
ans = max (ans, dp[i + 1][j + 1]);
}
}
cout << ans;
return 0;
}