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 }