首页 > 其他 > 详细

最长公共子串问题

时间:2020-03-31 12:50:22      阅读:56      评论:0      收藏:0      [点我收藏+]
 1 // 最长公共子串问题
 2 // dp解决
 3 // 状态转移方程: dp = 0 当str1[i-1] != str2[j-1], dp = dp[i-1][j-1] 当str1[i-1] == str2[j-1]
 4 
 5 #include <bits/stdc++.h>
 6 using namespace std;
 7 
 8 int longest_sub_string(char str1[], int len_str1, char str2[], int len_Str2)
 9 {
10     int dp[len_str1 + 1][len_Str2 + 1];
11     int res = 0;
12     for (int i = 0; i <= len_str1; i++) // 初始化dp数组第一列
13         dp[i][0] = 0;
14     for (int i = 1; i <= len_Str2; i++) // 初始化dp数组第一行
15         dp[0][i] = 0;
16     for (int i = 1; i <= len_str1; i++)
17         for (int j = 1; j <= len_Str2; j++)
18             if (str1[i-1] == str2[j-1])
19             {
20                 dp[i][j] = dp[i - 1][j - 1] + 1;
21                 res = max(res, dp[i][j]); //每次更新记录最大值
22             }
23             else //不相等的情况
24                 dp[i][j] = 0;
25     return res;
26 }
27 
28 int main()
29 {
30     // 输入12345 67345,输出3(345相同)
31     char str1[100], str2[100];
32     scanf("%s%s", str1, str2);
33     int lon = longest_sub_string(str1, strlen(str1), str2, strlen(str2));
34     printf("%d", lon);
35     return 0;
36 }

 

最长公共子串问题

原文:https://www.cnblogs.com/sqdtss/p/12603424.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!