【经典算法】:最长公共子序列(LCS问题,用遍历实现)
来源:互联网 发布:互动百科排名优化 编辑:程序博客网 时间:2024/06/05 19:42
题目
给出两个字符串,求两个字符串的最长公共子序列
思路
对两个字符串任意一个字符串s1进行遍历,然后查找s2中与s1[i]相同的位置,每次相同时就同时设两个变量pos1,pos2记录下位置然后往后比较,一直比较到不相同的时候为止,记录下来这个串的长度max。
每次得到max之后和之前的公共子串长度相比较,如果大于之前的,就把这次的子串长度设为是最长的
按照上述思路逐步进行,最后得到一个最长的子串以及其初始位置,输出即可
代码
//最长公共子序列问题// 测试数据 : aaccbkdabdaacc aaccbbgcdaacc#include <iostream>using namespace std;int pos = 0,max =0; //pos记录下标,max记录最大长度int main(){ char s0[1000],s1[1000]; //s0代表序列0 s1代表序列1 cin>>s0>>s1; int len0 = strlen(s0),len1 = strlen(s1); for(int i=0;i<len1;i++){ //这个指s1 for(int j =0;j<len0;j++){ if(s0[j]==s1[i]){ int temp_pos=i,temp_max=0,temp_i=i,temp_j=j;; while(s1[temp_i]==s0[temp_j] &&temp_i<len1 &&temp_j<len0){ temp_i++; temp_j++; temp_max++; } if(temp_max>max){ pos = temp_pos; max = temp_max; } } } } cout<<pos<<" "<<max<<endl; for(int k=pos;k<pos+max;k++){ cout<<s1[k]; } cout<<endl;}
运行截图
第一个参数0代表地址 ,第二个5代表子串长度
0 0
- 【经典算法】:最长公共子序列(LCS问题,用遍历实现)
- 动态规划经典问题---最长公共子序列(LCS)
- LCS 最长公共子序列(DP经典问题)
- 算法设计之最长公共子序列(LCS)问题
- LCS算法(最长公共子序列问题)
- [算法] 最长公共子序列(LCS)问题
- 算法学习 - 最长公共子序列(LCS)C++实现
- 最长公共子序列算法(LCS)
- LCS算法(最长公共子序列)
- 最长公共子序列(LCS)算法
- LCS问题(最长公共子序列)-动态规划实现
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS问题)
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS)问题
- 最长公共子序列(LCS)问题
- ubuntu文件传输,分布式系统搭建
- 利用UITextField自定义搜索栏,实现中文输入过程中字母的搜索功能
- iOS有三种多线程编程的技术
- Mac电脑下把自己的项目上传到Github
- 老友记——回味CSDN那些年的旧时光ME
- 【经典算法】:最长公共子序列(LCS问题,用遍历实现)
- 搜索技术地址
- C++primer plus第六版课后编程练习答案7.9
- git 错误操作回滚
- RedHat6.5 puppet配置(四)- 默认路径下的文件以及puppet命令解析
- struts的action里面参数什么时间必须要有get方法那
- Android Fragment切换动画
- CSS中box-shadow、text-shadow用法
- 百度地图API三:实时轨迹动态展现