题目链接:https://www.patest.cn/contests/gplt/L2-008
L2-008. 最长对称子串
题目描述:
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定”Is PAT&TAP symmetric?”,最长对称子串为”s PAT&TAP s”,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
参考资料:
AC代码:
#include<bits/stdc++.h>
using namespace std;
int lcs(string s1,string s2){
int len1 = s1.length();
int len2 = s2.length();
int ans = 0;
int **c = new int*[len1+1];
for(int i = 0;i < len1+1;i++){
c[i] = new int[len2+1];
}
for(int i = 0; i < len1+1; i++)
c[i][0]=0; //第0列都初始化为0
for(int j = 0; j < len2+1; j++)
c[0][j]=0; //第0行都初始化为0
for(int i = 1;i <= len1;i++){
for(int j = 1;j <= len2;j++){
if(s1[i-1] == s2[j-1]){
c[i][j] = c[i-1][j-1] + 1;
ans = max(ans,c[i][j]);
}else{
c[i][j] = 0;
}
}
}
return ans;
}
int main(){
// freopen("a.txt","r",stdin);
char s1[1001];
char s2[1001];
while(gets(s1)){
string a = s1;
int j = 0;
for(int i = strlen(s1)-1;i >= 0;i--){
s2[j] = s1[i];
j++;
}
string b = s2;
cout << lcs(a,b) << endl;
}
return 0;
}