poj 1458 求公共子串长度

来源:互联网 发布:java 组合算法 n选m 编辑:程序博客网 时间:2024/06/10 06:35

简单dp,串 s 和 串 t   。dp[i][j]表示 串s 的前i个字符 和 串 t 前j 个字符 中 公共的长度,那么 分析可得,如果 s[i]==t[j],那么dp[i+1][j+1]=dp[i][j]+1;

如果 s[i]!=t[j],那么 dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1])。。

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int maxn=10000;char s[maxn],t[maxn];int dp[maxn][maxn];int main(){while(scanf("%s%s",s,t)==2){int slen=strlen(s);int tlen=strlen(t);for(int i=0;i<slen;i++){dp[i][0]=0;for(int j=0;j<tlen;j++){dp[0][j]=0;if(s[i]==t[j])dp[i+1][j+1]=dp[i][j]+1;else {dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]);}}}printf("%d\n",dp[slen][tlen]);}}



原创粉丝点击