NYOJ308 Substring (DP)

题目意思: ?pid=308 给定一个字符串s,求出s与其逆序串的最长连续字串。刚开始看成求最长回文字串的问题了,Wa~!这英语我也是醉了。。。喵

分析: 将s逆转为ss,求s和ss的最长连续子序列即可。

if(s[i-1]==ss[j-1]) dp[i][j]=dp[i-1][j-1]+1;

AC代码:

/** *@xiaoran *给定一个字符串s,求其和逆序串ss的最长连续公共子序列 *dp[i][j]=dp[i-1][j-1]+1 当s[i-1]==ss[j-1] */;string rev(string s){//翻转字符串string ss=””;for(int i=s.size()-1;i>=0;i–){ss+=s[i];}return ss;}int dp[55][55];int main(){int n,k,m;string s,ss;cin>>n;while(n–){memset(dp,0,sizeof(dp));cin>>s;ss=rev(s);k=0; m=0;for(int i=1;i<=s.size();i++){for(int j=1;j<=ss.size();j++){if(s[i-1]==ss[j-1]){dp[i][j]=dp[i-1][j-1]+1;}if(m<dp[i][j]){//当前值大于最大值的长度m=dp[i][j];//更新最大长度值k=i-1;//记录到哪儿结束}}}for(int i=k-m+1;i<=k;i++){cout<<s[i];}cout<<endl;}return 0;}

,『 不可能 』只存在於蠢人的字典里

NYOJ308 Substring (DP)

相关文章:

你感兴趣的文章:

标签云: