NYOJ_37_回文字符串
生活随笔
收集整理的這篇文章主要介紹了
NYOJ_37_回文字符串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先,我們把字符串反轉,然后用反串和原串求最大公共子序列,再用字符串長度減去最大公共子序列的長度就是答案,我們還可以用滾動數組優化內存
狀態轉移方程:
(i長度的a串和j長度的b串的最長公共子序列長度)
? ? ? ? ? ? ?1.dp[i-1][j-1]+1 ? ? a[i]=b[j]
dp[i][j]=
? ? ? ? ? ? ?2.max(dp[i][j-1],dp[i-1][j]) ? ? a[i]!=b[j]
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<string> using namespace std; int re[2][1005];//使用滾動數組優化了空間 int main() {int t,i,j;string a,b;scanf("%d",&t);while(t--){cin>>a;b=a;reverse(a.begin(),a.end());memset(re,0,sizeof(re));for(i=0;i<a.length();++i)for(j=0;j<b.length();++j){if(a[i]==b[j]){re[(i+1)&1][j+1]=re[i&1][j]+1;}else re[(i+1)&1][j+1]=re[i&1][j+1]>re[(i+1)&1][j]?re[i&1][j+1]:re[(i+1)&1][j];//條件表達式是最省時間的 }printf("%d\n",a.length()-re[(a.length())&1][b.length()]);}return 0; }?
轉載于:https://www.cnblogs.com/A-way/archive/2013/05/02/3054423.html
總結
以上是生活随笔為你收集整理的NYOJ_37_回文字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到针灸的针是什么意思
- 下一篇: 梦到坐在棺材上是什么意思