if(a[i] == b[j]) dp[i][j] = dp[i-1][j-1] + 1; else{ dp[i][j] = 0; } 数组滚动优化
#include<stdio.h> #include<string.h> int main() { char s1[100000],s2[100000]; scanf("%s",s1); scanf("%s",s2); int i,j,k,m,n,max=0,sum=0; int len1=strlen(s1),len2=strlen(s2); for(i=0;i<len1;i++){ for(n=0;n<len2;n++){ if(s1[i]==s2[n]){ sum=0; for(j=i,m=n;j<len1,m<len2;j++,m++){ if(s1[j]==s2[m]){ sum++; } else if(s1[j]!=s2[m]) break; } if(sum>max) max=sum; n=m; } } } printf("%d",max); return 0; }
为啥输入还有一行的啊。。。
子序列和子串是两回事吧。。。
这题数据不够大,直接暴力都能过
不BB,放个模板 小孔啊,你这个模板我贴上去报错啊[em:10]
不BB,放个模板 我孔美如画[em:04]
if(a[i] == b[j]) dp[i][j] = dp[i-1][j-1] + 1;
else{
dp[i][j] = 0;
}
数组滚动优化
为啥输入还有一行的啊。。。
子序列和子串是两回事吧。。。
这题数据不够大,直接暴力都能过
不BB,放个模板
小孔啊,你这个模板我贴上去报错啊[em:10]
不BB,放个模板
我孔美如画[em:04]