LCS 算法实现
动态规划算法
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std; #define MAXSTRLEN 20 int Lcs(char x[], char y[], int path[][MAXSTRLEN])//求序列x和y的最长公共子序列,path保存路径指向,以方便打印公共子序列
{
int i, j;
int len1=strlen(x)-;
int len2=strlen(y)-; int **c=new int*[len1+];
for(i=; i<=len1; i++)
c[i]=new int[len2+]; for(i=; i<=len1; i++)
c[i][]=;
for(i=; i<=len2; i++)
c[][i]=;
for(i=; i<=len1; i++)
for(j=; j<=len2; j++)//从x[1],y[1]开始
{
if(x[i]==y[j])
{
c[i][j]=c[i-][j-]+;
path[i][j]=;
}
else if(c[i-][j]>=c[i][j-])
{
c[i][j]=c[i-][j];
path[i][j]=;
}
else
{
c[i][j]=c[i][j-];
path[i][j]=;
}
} return c[len1][len2];
} void PrintLcs(int i, int j, char x[], int path[][MAXSTRLEN])//打印最长公共子序列
{
if(i== || j==)
return; if(path[i][j]==)
{
PrintLcs(i-, j-, x, path);
cout<<x[i];
}
else if(path[i][j]==)
PrintLcs(i-, j, x, path);
else
PrintLcs(i, j-, x, path); }
void main()
{
char a[MAXSTRLEN];
char b[MAXSTRLEN];
int path[MAXSTRLEN][MAXSTRLEN];
gets(a+);//a[0]不算,从a[1]开始
gets(b+);//b[0]不算,从b[1]开始 cout<<Lcs(a, b, path)<<endl;
cout<<"最长公共子序列:";
PrintLcs(strlen(a)-, strlen(b)-, a, path);
cout<<endl; }
递归算法
#include <iostream>
using namespace std; #define MAXSTRLEN 20 //递归算法
int Lcs(char *str1, char *str2)
{
if(*str1=='\0' || *str2=='\0')
return ;
if(*str1==*str2)
return Lcs(str1+, str2+)+;
else if(Lcs(str1+, str2)>Lcs(str1, str2+))
return Lcs(str1+, str2);
else
return Lcs(str1, str2+); } void main()
{
char a[MAXSTRLEN];
char b[MAXSTRLEN]; gets(a);
gets(b);
cout<<Lcs(a, b)<<endl; }
LCS 算法实现的更多相关文章
- LCS算法
转自:http://hzzy-010.blog.163.com/blog/static/79692381200872024242126/ 好详细~~~也十分好理解~~~ 最长公共子序列问题(非连续的 ...
- O(nlogn)LIS及LCS算法
morestep学长出题,考验我们,第二题裸题但是数据范围令人无奈,考试失利之后,刻意去学习了下优化的算法 一.O(nlogn)的LIS(最长上升子序列) 设当前已经求出的最长上升子序列长度为len. ...
- Levenshtein Distance + LCS 算法计算两个字符串的相似度
//LD最短编辑路径算法 public static int LevenshteinDistance(string source, string target) { int cell = source ...
- 对LCS算法及其变种的初步研究
LCS的全称为Longest Common Subsequence,用于查找两个字符串中的最大公共子序列,这里需要注意区分子序列与子串,所谓子序列,指的是从前到后,可以跳跃元素筛选,而字串则必须连续筛 ...
- 求两个字符串最长子串的LCS算法 C语言实现(简短的实现函数)
/************************************************************************* > File Name: lcs.c > ...
- LCS算法思想
LCS问题就是求两个字符串最长公共子串的问题.解法就是用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹配情况,若是匹配则为1,否则为0.然后求出对角线最长的1序列,其对应的位置就是最长匹配子串的 ...
- LCS 算法
下面的程序分别实现了使用LCS求连续子串和不连续子串的匹配情况! http://beyond316.blog.51cto.com/7367775/1266360
- 所有不同的序列串-----LCS算法的变种
今天遇到LEETCODE的第115题: Distinct Subsequences Given a string S and a string T, count the number of disti ...
- 奇妙的算法之LCS妙解
LCS算法妙解 LCS问题简述:最长公共子序列 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则S 称为已知序列的最长公共子序列. LCS问题的分支:最长公共子串 ...
随机推荐
- 开涛spring3(7.2) - 对JDBC的支持 之 7.2 JDBC模板类
7.2 JDBC模板类 7.2.1 概述 Spring JDBC抽象框架core包提供了JDBC模板类,其中JdbcTemplate是core包的核心类,所以其他模板类都是基于它封装完成的,JDB ...
- 详解Struts2拦截器机制
Struts2的核心在于它复杂的拦截器,几乎70%的工作都是由拦截器完成的.比如我们之前用于将上传的文件对应于action实例中的三个属性的fileUpload拦截器,还有用于将表单页面的http请求 ...
- APP为什么需要着陆页
小编APP运营团队一直认为,虽然大多数的用户会在App Store或安卓应用商店中搜寻我们的应用,但也有许多用户会通过传统的PC端搜索来寻找答案.而且在APP营销中,为了更好的将用户转换为下载或购买, ...
- python爬虫从入门到放弃(六)之 BeautifulSoup库的使用
上一篇文章的正则,其实对很多人来说用起来是不方便的,加上需要记很多规则,所以用起来不是特别熟练,而这节我们提到的beautifulsoup就是一个非常强大的工具,爬虫利器. beautifulSoup ...
- Python教程(1.1)——配置Python环境
在正式开始学习Python之前我们需要先配置好Python环境. Python Python可以从Python官方网站上,选择适合你的操作系统的版本下载.下载完之后,运行下载的可执行文件进行安装. 这 ...
- eclipse如何导入项目和文件
在左侧创建项目区,右击鼠标-->选择Import-–>General-> Existing Projects into workPlace-->选择最下方Next-->点 ...
- [IR] String Matching
BWT KMP Boyer-Moore BWT [IR] BWT+MTF+AC 中已经介绍了BWT (Burrows–Wheeler_transform)数据转换算法, 这种变换方式不仅方便压缩,同时 ...
- Linux 安装配置 Tomcat
1.下载 tomcat Linux 版本 oracle 官网下载地址:http://tomcat.apache.org/download-80.cgi 百度云盘链接:http://pan.baidu. ...
- zookeeper源码分析-版本生成
zookeeper版本生成规则: min - minor version number micro - minor minor version number qualifier - optional ...
- maven项目转成web项目没有生成WebContent目录
有时候建立maven项目转成web项目没有生成WebContent目录,此时把Dynamic web module 去掉勾选,然后ok,再点开项目的properties,再选中Dynamic web ...