练习题 No.6 最长公共子序(LCS)-附赠最长公共子串
来源:互联网 发布:淘宝淘宝联盟怎么用法 编辑:程序博客网 时间:2024/06/05 09:15
要求
给定二个字符串
字符串
输入格式
第一行输入一行字符串
第二行输入一行字符串
输出格式
输出最长的长度
测试输入
bbbbaaba
aaaabbaa
测试输出
4
解题思路
使用递推式
如果str[i] == str[j],则dp[i + 1][j + 1] = dp[i][j] + 1
否则dp[i + 1][j + 1] = max(dp[i + 1][j], dp[i][j + 1])
最后的dp[size][size2]即为最长子串长度
测试输入中的数据会形成以下矩阵
0 0 0 0 0 0 0 0 00 0 0 0 0 1 1 1 10 0 0 0 0 1 2 2 20 0 0 0 0 1 2 2 20 0 0 0 0 1 2 2 20 1 1 1 1 1 2 3 30 1 2 2 2 2 2 3 40 1 2 2 2 3 3 3 40 1 2 3 3 3 3 4 4
代码
#include <iostream>#include <string>using namespace std;int main() { string str; string str2; cin >> str; cin >> str2; int dp[101][101] = {0}; int size = str.length(); int size2 = str2.length(); for (int i = 0; i < size; i++) { for (int j = 0; j < size2; j++) { if (str[i] == str2[j]) { dp[i + 1][j + 1] = dp[i][j] + 1; } else { dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j]); } } } cout << dp[size][size2] << endl; return 0;}
#include <iostream>#include <string>using namespace std;int main() { string str; string str2; cin >> str; cin >> str2; int dp[101][101] = {0}; int size = str.length(); int size2 = str2.length(); pair<int, int> max; max.second = 0; for (int i = 0; i < size; i++) { for (int j = 0; j < size2; j++) { if (str[i] == str2[j]) { if (i == 0 || j == 0) { dp[i][j] = 1; } else { dp[i][j] = dp[i - 1][j - 1] + 1; } if (dp[i][j] > max.second) { max.first = i; max.second = dp[i][j]; } } else { dp[i][j] = 0; } } } for (int i = max.first - max.second + 1; i <= max.first; i++) { cout << str[i]; } cout << endl; return 0;}
0 0
- 练习题 No.6 最长公共子序(LCS)-附赠最长公共子串
- LCS:最长公共子串
- 最长公共子串LCS
- LCS最长公共子串
- 最长公共子串LCS
- 最长公共子串(LCS)
- LCS 最长公共子序列&最长公共子串
- LCS:最长公共子序列
- LCS---最长公共子序列
- 最长公共子序列 LCS
- LCS -- 最长公共子序列
- LCS最长公共子序列
- 最长公共子序列LCS
- LCS-最长公共子序列
- 最长公共子序列 LCS
- 最长公共子序列(LCS)
- 最长公共子序列(LCS)
- 最长公共子序列LCS
- 妹子UI轮播插件中关于用户停止操作重新轮播失效的解决办法
- 1008. 数组元素循环右移问题 (20) python篇
- POJ 2485Highways (又一个Prim最小生成树水题)
- SecureCRT 常用快捷键
- 对UIView的hitTest: withEvent: 方法的理解
- 练习题 No.6 最长公共子序(LCS)-附赠最长公共子串
- Java 字符流操作
- 第四周:( LeetCode417 ) Pacific Atlantic Water Flow(c++)
- JS实现弹出框文字居中
- 实现应用软件能够通过运行窗口打开
- Java抽象类
- 基于C++模板 单链表基本操作
- linux下使用ffmpeg将amr转成mp3
- Math.round(11.5)等于多少?Math.round(-11.5)等于多少?