您的位置:首页 > 其它

dp——求最长公共子串

2017-03-03 16:24 357 查看
#include <cstdio>
#include <cstring>

using namespace std;

#define MAX_DATA 1050

char src[MAX_DATA];
char dst[MAX_DATA];

int dp[MAX_DATA][MAX_DATA];

int main(void)
{
int i , j ;
int max = -1 , s_i = 0 , s_j = 0;

#ifdef DEBUG
freopen("input.txt" , "r" , stdin);
freopen("output.txt" , "w" ,stdout);
#endif

scanf("%s" , src+1);
scanf("%s" , dst+1);

memset(dp , 0 ,sizeof(dp));

for( i = 1 ; i <strlen(src+1)+1 ; i++)
{
for( j = 1 ; j <strlen(dst+1)+1 ; j++)
{
if(src[i]==dst[j])
{
dp[i][j] = dp[i-1][j-1]+1;
}
else
{
dp[i][j] = 0;
}

if(dp[i][j]>max)
{
max= dp[i][j];
s_i = i ;
s_j = j ;
}

}
}

printf("%d\n" , max);

while(s_i>=0 && s_j>=0)
{
if(dp[s_i][s_j]!=0)
{
printf("%c" , src[s_i]);
s_i--;
s_j--;
}
else
{
printf("\n");
break;
}
}

return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: