动态规划算法求两个字符串的最大公共子串
来源:互联网 发布:三鼎全站仪数据编辑 编辑:程序博客网 时间:2024/05/16 17:56
<pre name="code" class="cpp">#include "stdafx.h"#include "windows.h"#include <iostream>#include <string>#include <sstream>#include "assert.h"using namespace std;//时间复杂度和空间复杂度均为 O(p*q) 其中p、q分别为两个字符串的长度,有待改进
//获取两个字符串公共子串int GetMaxCommonSubStr(string &strFirst, string &strSecond){if((strFirst=="") || (strSecond=="")){return 0;}int i, j;int iLenFirst = strFirst.length();int iLenSecond = strSecond.length();int iMaxCmnLne = 0; //最大公共子串长度string strLCS = ""; //存储最大公共子串char chFirst, chSecond;string **num = new string *[iLenFirst];assert(num!=NULL);for(i=0; i<iLenFirst; i++){num[i] = new string[iLenSecond];}chFirst = '\0';chSecond = '\0';for(i=0; i<iLenFirst; i++){chFirst = strFirst.at(i);for(j=0; j<iLenSecond; j++){chSecond = strSecond.at(j);if(chFirst != chSecond){num[i][j] ="";}else{if(0==i || 0==j){num[i][j] = chFirst;}else{num[i][j] = num[i-1][j-1] + chFirst;}if(num[i][j].length()>iMaxCmnLne) //如果当前获得的最大公共子串比以前的最大的大,则更新最大公共子串长度{strLCS = ""; //有新的最大公共子串,以前的作废iMaxCmnLne = num[i][j].length();strLCS = num[i][j];}else if(num[i][j].length()==iMaxCmnLne) //获取到目前为止多个当前最大公共子串,用,分得开{strLCS += ',' + num[i][j];}}}}//内存回收for(i=0; i<iLenFirst; i++){delete [] num[i];}delete [] num;return iMaxCmnLne;}int _tmain(int argc, _TCHAR* argv[]){int iResultLen;string strLine, InputStr1, InputStr2;getline(cin, strLine);istringstream stream(strLine);stream>>InputStr1;stream>>InputStr2;iResultLen = GetMaxCommonSubStr(InputStr1, InputStr2);cout<<iResultLen;Sleep(5000);return 0;}
0 0
- 动态规划算法求两个字符串的最大公共子串
- 求两个字符串最长公共子串(动态规划)
- 利用动态规划和递归分别求两个串的最大公共子序列
- 利用后缀数组求字符串的最长重复子串的算法 利用二维数组求两个字符串的最长公共字串(动态规划)
- LCS求两个字符串的最大公共子串
- 求两个字符串的最大公共子串
- 求两个字符串的最大公共子串
- 求两个字符串的最大公共子串
- C++实现求两个字符串的最大公共子串
- 求两个字符串的最大公共子串
- 【动态规划】LCS算法:求两字符串最大公共子序列/删除字符使成为回文串
- 算法题-两个字符串的最大公共子串
- 求两个字符串的最长公共子序列的长度(动态规划)
- 求两个字符串的最长公共子序列的长度(动态规划)
- 动态规划法求两个字符串的最长公共子序列
- 动态规划求两个字符串的连续最长公共子序列
- 动态规划经典题:给出两个字符串s1和s2,返回其中最大的公共子串
- 两个字符串的最大公共子串
- Mac平台下boost安装及使用
- 什么时候c++会生成临时变量(2014年9月3日13:47:24)
- JS--03
- 数字图像处理--显著目标检测思路
- HDU 1160 FatMouse's Speed (最长上升子序列+记录路径)
- 动态规划算法求两个字符串的最大公共子串
- work_weipa_如何获取屏幕的宽度
- 分页的一些实现的思想和方法(ThreadLocal+Filter+pager-taglib)
- 排序法
- $.each 和$(selector).each()的区别
- 关于struts2.mxl配置错误之1
- Android.mk简介 .
- 使用 FocusPoint.js 实现图片的响应式裁剪
- 大数相乘