回文。
第一感觉就可以猜出来大概是和他自己的倒序序列求公共子序列。
然后验证了几个例证之后发现果然如此。
就可以大胆编了。
然后就是LCS,很基础。
下面这个代码不是最优。
空间复杂度和时间复杂度都再优化。
特别是空间复杂度可以用一位数组来试试。
Source Code
Problem: 1159 | User: 64162451 | |
Memory: 49336K | Time: 797MS | |
Language: C++ | Result: Accepted |
- Source Code
#include<iostream> #include<fstream> const int N=5005; char a[N]; char b[N]; short dp[N][N]; using namespace std; int main() { int n; cin>>n; cin>>a; for(int i=0;i<n;i++) b[n-1-i]=a[i]; for(int i=0;i<=n;i++) dp[0][i]=dp[i][0]=0; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(a[i-1]==b[j-1]) { dp[i][j]=dp[i-1][j-1]+1; } else dp[i][j]=dp[i-1][j]>dp[i][j-1]?dp[i-1][j]:dp[i][j-1]; } cout<<n-dp[n][n]<<endl; system("pause"); return 0; }