HLBU 1293: 求最长公共子串(串)

题目描述

求采用顺序结构存储的串s和串t的一个最长公共子串,若没有则输出false,若最长的有多个则输出最先出现的那一串。

输入

输入两个字符串

输出

输出公共子串

样例输入

abcdef adbcef

样例输出

bc
 
 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 #define maxSize 1000
 7 char str1[maxSize], str2[maxSize];
 8 
 9 /******比起最长公共子序列容易多了*******/
10 int main()
11 {
12     while(cin>>str1>>str2)
13     {
14 
15         int len1 = strlen(str1);
16         int len2 = strlen(str2);
17         int dp[len1+1][len2+1];
18         memset(dp, 0, sizeof(dp));
19         int max = 0; int maxi = 0;//记录最大长度值,和字符串1的公共子串的结尾索引
20         for(int i=1; i<=len1; i++)
21         {
22             for(int j=1; j<=len2 ;j++)
23             {
24                 if(str1[i-1]==str2[j-1])
25                 {
26                     dp[i][j]= dp[i-1][j-1] + 1;//递推公式
27                     if(dp[i][j]>max)
28                     {
29                         max = dp[i][j];
30                         maxi = i-1;
31                     }
32                 }
33             }
34         }
35         
36         for(int i=maxi - max + 1; i<=maxi; i++)
37         {
38             cout<<str1[i];
39         }
40         cout<<endl;
41     }
42     return 0;
43 }

 

posted @ 2013-03-22 17:21  Rorchach  阅读(535)  评论(0编辑  收藏  举报