POJ 1458
給出兩個字符串,求它們最長的公共子字符串長度。
如abfgc? acbfefc
最長的公共子字符串為abfc?? 長度為4
思路:找到s1[i]與s2[j]的時候,相等的話,dp[i+1][j+1]=dp[i][j]+1;
不等的話dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);
?
?
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int dp[300][300];
int main()
{?? string s1,s2;
??? while(cin>>s1>>s2){
??? memset(dp,0,sizeof(dp));
??? for(int i=0;i<s1.size();i++){
????? ?? for(int j=0;j<s2.size();j++){
????? ?????? if(s1[i]==s2[j]){
?????? ????????? dp[i+1][j+1]=dp[i][j]+1;
?????? ????? }
??????? ???? else {
?????? ????????? dp[i+1][j+1]=dp[i][j+1];
?????? ????????? if(dp[i+1][j]>dp[i][j+1])dp[i+1][j+1]=dp[i+1][j];
?????? ????? }
???? ??? }
?? ? }
?? ? cout<<dp[s1.size()][s2.size()]<<endl;
}
??? return 0;
}
轉載于:https://www.cnblogs.com/Mr-Xu-JH/p/3850836.html
總結
- 上一篇: 请问:第一次清宫未干净,再做第二次清宫的
- 下一篇: 好听的微信名字两个字