博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
输出两字符串最长公共子串
阅读量:5121 次
发布时间:2019-06-13

本文共 1364 字,大约阅读时间需要 4 分钟。

//得到两个任意长度字符串的公共最长子字符串,这里的子串可以不连续

/*
分析假设,如果串x,y的公共子串z,x.len=m,y.len=n,z.len=l;
如果z[l-1] = x[m-1] = y[n-1],那么z(0...l-2)也是x(0...m-2)和y(0...n-2)的最长子串
如果z[l-1] = x[m-1] != y[n-1],那么z(0...l-2)是x(0...m-2)和y(0...n-1)的最长子串
如果z[l-1] != x[m-1] = y[n-1],那么z(0...l-2)是x(0...m-1)和y(0...n-2)的最长子串
可以确定这是一个动态规划的问题,问题可能有多解,后期选择的时候需要比较大小
用b[i][j]表示当前位置是否为公共点用于指示构造最长序列,其中0代表命中,1代表向上,2代表向左
c[i][j]表示当前的最大公共长度
*/

#include 
//#include
using namespace std;class solution{public: int max_sub_string(string& x,string& y) { int i,j; int m = x.size()+1; int n = y.size()+1; int** b = new int*[m-1]; int** c = new int*[m]; for(i=0;i
= c[i][j-1]) { c[i][j] = c[i-1][j]; b[i-1][j-1] = 1; } else { c[i][j] = c[i][j-1]; b[i-1][j-1] = 2; } } print_route(b,x.size()-1,y.size()-1,x); return c[m-1][n-1]; } void print_route(int** b,int row,int col,string& x) { if(row==-1||col==-1) { return; } if(b[row][col]==0) { print_route(b,row-1,col-1,x); cout<
>a>>b) cout<
<

 

转载于:https://www.cnblogs.com/jianbo1995/p/10738867.html

你可能感兴趣的文章
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>
Win磁盘MBR转换为GUID
查看>>
大家在做.NET B/S项目的时候多用什么设技术啊?
查看>>
Java SE和Java EE应用的性能调优
查看>>
Android设计模式系列--原型模式
查看>>
免费的论文查重网站
查看>>
C语言程序第一次作业
查看>>
leetcode-Sort List
查看>>
中文词频统计
查看>>
了解node.js
查看>>
想做移动开发,先看看别人怎么做
查看>>
Eclipse相关集锦
查看>>
虚拟化架构中小型机构通用虚拟化架构
查看>>
继承条款effecitve c++ 条款41-45
查看>>
HTML+CSS学习笔记(九)
查看>>
Java泛型的基本使用
查看>>
1076 Wifi密码 (15 分)
查看>>
noip模拟赛 党
查看>>
bzoj2038 [2009国家集训队]小Z的袜子(hose)
查看>>
Java反射机制及其Class类浅析
查看>>