http://acm.pku.edu.cn/JudgeOnline/problem?id=1159
使用LCS解决回文问题,可以通过简单测试数据。不知道为什么WA。
回头在看看。
#include <iostream>
using namespace std;
#define MAX 5001
char AA[MAX][MAX];
char SA[MAX];
char SB[MAX];
int len;
int foo(int raw,int col){
if(raw >= len || col >= len){
return 0;
}
if(AA[raw][col] != -1)
return AA[raw][col];
int tmp;
if(SA[col] == SB[raw]){
tmp = foo(raw + 1,col + 1) + 1;
}else{
int left = foo(raw , col + 1);
int down = foo(raw + 1, col);
tmp = (left > down)?left : down;
}
AA[raw][col] = tmp;
return tmp;
}
int main(){
memset(AA,-1,sizeof(AA));
cin >> len;
getchar();
gets(SA);
for(int i = 0; i < len ; ++i){
SB[i] = SA[len - i -1];
}
cout << len - foo(0,0) << endl;
}
本文介绍了一种使用最长公共子序列(LCS)算法来解决回文串问题的方法,并提供了一个C++实现示例。该算法通过将原始字符串与其反转后的字符串进行比较,找出二者之间的最长公共子序列,从而确定原始字符串中最长的回文子串。

被折叠的 条评论
为什么被折叠?



