算法提高 最长字符序列
2018-03-13 23:54
316 查看
算法提高 最长字符序列 时间限制:1.0s 内存限制:256.0MB 最长字符序列问题描述 设x(i), y(i), z(i)表示单个字符,则X={x(1)x(2)……x(m)},Y={y(1)y(2)……y(n)},Z={z(1)z(2)……z(k)},我们称其为字符序列,其中m,n和k分别是字符序列X,Y,Z的长度,括号()中的数字被称作字符序列的下标。
如果存在一个严格递增而且长度大于0的下标序列{i1,i2……ik},使得对所有的j=1,2,……k,有x(ij)=z(j),那么我们称Z是X的字符子序列。而且,如果Z既是X的字符子序列又是Y的字符子序列,那么我们称Z为X和Y的公共字符序列。
在我们今天的问题中,我们希望计算两个给定字符序列X和Y的最大长度的公共字符序列,这里我们只要求输出这个最大长度公共子序列对应的长度值。
举例来说,字符序列X=abcd,Y=acde,那么它们的最大长度为3,相应的公共字符序列为acd。输入格式 输入一行,用空格隔开的两个字符串输出格式 输出这两个字符序列对应的最大长度公共字符序列的长度值样例输入aAbB aabb样例输出2数据规模和约定 输入字符串长度最长为100,区分大小写。
求的是两个字符串的最大长度公共字符序列的长度值。
代码:
如果存在一个严格递增而且长度大于0的下标序列{i1,i2……ik},使得对所有的j=1,2,……k,有x(ij)=z(j),那么我们称Z是X的字符子序列。而且,如果Z既是X的字符子序列又是Y的字符子序列,那么我们称Z为X和Y的公共字符序列。
在我们今天的问题中,我们希望计算两个给定字符序列X和Y的最大长度的公共字符序列,这里我们只要求输出这个最大长度公共子序列对应的长度值。
举例来说,字符序列X=abcd,Y=acde,那么它们的最大长度为3,相应的公共字符序列为acd。输入格式 输入一行,用空格隔开的两个字符串输出格式 输出这两个字符序列对应的最大长度公共字符序列的长度值样例输入aAbB aabb样例输出2数据规模和约定 输入字符串长度最长为100,区分大小写。
求的是两个字符串的最大长度公共字符序列的长度值。
代码:
//最长子序列 #include<iostream> #include<algorithm> #include<string> #include<cstring> #include<cmath> using namespace std; string s1, s2; //递归 int LIS(int i, int j) {//i和j表示的是字符串的起始点 if (i >= s1.length() || j>=s2.length()) {// return 0; } else if (s1[i]==s2[j]) { return LIS(i+1,j+1) + 1;//重点 } else { return max(LIS(i+1,j), LIS(i, j+1)); } } int main() { cin >> s1 >> s2; cout<<LIS(0,0); return 0; }
相关文章推荐
- 算法提高 最长字符序列
- 算法提高 最长字符序列 (递归or动态规划)
- 算法提高 ADV-207 最长字符序列
- 算法提高 最长字符序列
- 算法提高 最长字符序列
- 算法提高 最长字符序列
- 求两字符序列的最长公共字符子序列算法的优化过程
- 最长递增子序列(算法)
- 最长上升子序列(LIS)的O(nlogn) & O(n^2)算法 - 动态规划
- 笔试算法题(35):最长递增子序列 & 判定一个字符串是否可由另一个字符串旋转得到
- 最长上升子序列(LIS)长度的O(nlogn)算法
- 最长字符串匹配算法(KMP算法)
- 数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
- 最长递增子序列 O(NlogN)算法
- 最长不下降子序列的O(n)算法
- 最长递增子序列长度算法
- 最长公共字序列(LCS)(转载)(个人感觉外国的算法翻译到国内后,有误!求指点!!!)
- 算法面试题:如何找最长的增长子序列
- 【NOIP2016提高A组集训第14场11.12】最长公共回文子序列
- 算法分析与设计-11-最长递增子序列的动态规划算法