求最长公共子串
来源:互联网 发布:cydia数据库损坏 编辑:程序博客网 时间:2024/05/17 07:57
题目:
给两个字符串,找出它们的最长的公共子串,跟求最长公共子序列不同,这个是求连续的。
思路:
动态规划。
dp[i][j]表示字符串a中[0~i]的子串,字符串b中[0~j]的子串,此时的最大长度。
如果a[i]==b[j],那么dp[i][j]=dp[i-1][j-1]+1;
如果a[i]不等于b[j],那么dp[i][j]=0。
变量end存放当前最长公共子串的最后一个元素的下标。
如果最大长度更新,说明end也要发送相应变化。
代码:
#include<iostream>#include<string>#include<stdio.h>#include<stdlib.h>#include<vector>using namespace std;string findLongestCommonSubstring(string a, string b){ int la = a.size(); int lb = b.size(); vector<vector<int>> dp(la+1,vector<int>(lb+1,0)); int maxLen = -1; int end; for (int i = 1; i <= la; i++){ for (int j = 1; j <= lb; j++){ if (a[i - 1] == b[j - 1]){ dp[i][j] = dp[i - 1][j - 1] + 1; } if (maxLen < dp[i][j]){ maxLen = dp[i][j]; end = i-1; } } } string str = a.substr(end-maxLen+1,maxLen); return str;}int main(){ string a = "1AB2345CD"; string b = "12345EF"; string res=findLongestCommonSubstring(a, b); cout << res; system("pause"); return 0;}
0 0
- 求最长公共子串
- 求最长公共子串
- 求最长公共子串
- 求最长公共子串
- 求最长公共子串
- 求最长公共子串
- 求最长公共子串
- 求最长公共子串(串)
- LCS算法求最长公共子串
- 求最长公共子串问题
- LCS算法求最长公共子串
- 求两个字符串最长公共子串
- 求最长连续公共子串
- 【动态规划】求最长公共子串
- lintcode 求最长公共子串
- 动态规划求最长公共子串
- LCS求最长公共子串
- 求最长公共子序列
- C - Sorting Railway Cars
- 前端要给力之:语句在JavaScript中的值
- clone
- STM32系列第22篇--I2C
- 一个关于时间的类(友元类),不计闰年
- 求最长公共子串
- Java中堆内存和栈内存的区别
- 安卓开发——报错:You must specifiy a layout in the include tag: <include layout="@layout/layoutID" />
- MySql基础知识(一)
- 数据持久化基础知识笔记
- HDU-1088-Write a simple HTML Browser
- 将CART算法用于回归
- Spring xml配置文件头解析
- [转]ServletConfig与ServletContext对象详解