最长公共子序列(LCS)最长递增子序列(LIS)
#include<cstring>
#include<iostream>
#include<stack>
#include <algorithm>
using namespace std;
int dp[100][100];
char D[100][100];
stack<char> st;
string s1,s2;
int LCS(string s1,string s2)
{
for(int i=0;i<100;i++)
{
dp[i][0] = dp[0][i] = 0;
}
for(int i=0;i<s1.length();i++)
for(int j=0;j<s2.length();j++)
{
if(s1[i] == s2[j])
{
dp[i][j] = dp[i-1][j-1]+1;
D[i][j] = 'x';
}
else
{
dp[i][j] = dp[i-1][j] > dp[i][j-1]?dp[i-1][j] : dp[i][j-1];
if(dp[i-1][j] > dp[i][j-1])
{
dp[i][j] = dp[i-1][j];
D[i][j] = 's';
}
else
{
dp[i][j] = dp[i][j-1];
D[i][j] = 'z';
}
}
}
int p = s1.length()-1;
int q = s2.length()-1;
while(p>=0&&q>=0)
{
if(D[p][q] == 'z')
{
q--;
}
else if(D[p][q] == 's')
{
p--;
}
else if(D[p][q] == 'x')
{
st.push(s1[p]);//反向输出
p--;
q--;
}
}
while(!st.empty())
{
cout<<st.top();
st.pop();
}
cout<<endl;
return dp[s1.length()-1][s2.length()-1];
}
int main()
{
//LCS
//cin>>s1>>s2;
//cout<<LCS(s1,s2)<<endl;
//LIS
cin>>s1;
s2 = s1;
sort(s2.begin(),s2.end());
cout<<LCS(s1,s2)<<endl;
return 0;
}
最长公共子序列(LCS)最长递增子序列(LIS)的更多相关文章
- 最长公共子串(LCS:Longest Common Substring)
最长公共子串(LCS:Longest Common Substring)是一个非常经典的面试题目,本人在乐视二面中被面试官问过,惨败在该题目中. 什么是最长公共子串 最长公共子串问题的基本表述为:给定 ...
- 动态规划 最长公共子序列 LCS,最长单独递增子序列,最长公共子串
LCS:给出两个序列S1和S2,求出的这两个序列的最大公共部分S3就是就是S1和S2的最长公共子序列了.公共部分 必须是以相同的顺序出现,但是不必要是连续的. 选出最长公共子序列.对于长度为n的序列, ...
- DP:LCS(最长公共子串、最长公共子序列)
1. 两者区别 约定:在本文中用 LCStr 表示最长公共子串(Longest Common Substring),LCSeq 表示最长公共子序列(Longest Common Subsequence ...
- 最长公共子串LCS(Longest Common Substring)
一.问题描述 寻求两个字符串中的最大公共字串,其中子串是指字符串中连续的字符组成的,而不是像子序列,按照字符的前后顺序组成.如str1="sgabacbadfgbacst",str ...
- [算法练习]最长公共子串(LCS)
题目说明: 找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的.比如"bab"和"caba"的最长公共子串是"ba"和" ...
- 最长公共子串(LCS) lg SP1811
后缀自动机的一大用处就是求最长公共子串了 这道题的话题意就是给你两个字符串,求最长公共子串 做法的话是先使用一个字符串建立SAM,然后让另一个串在上面进行匹配 匹配的策略是优先匹配当前节点的下一个字符 ...
- 求两个字符串的最长公共子串(LCS)
http://tianyunpu2008.blog.163.com/blog/static/6559379920089162236915/
- 《算法导论》读书笔记之动态规划—最长公共子序列 & 最长公共子串(LCS)
From:http://my.oschina.net/leejun2005/blog/117167 1.先科普下最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要 ...
- 删除部分字符使其变成回文串问题——最长公共子序列(LCS)问题
先要搞明白:最长公共子串和最长公共子序列的区别. 最长公共子串(Longest Common Substirng):连续 最长公共子序列(Longest Common Subsequence,L ...
- 最长公共子序列/子串 LCS(模板)
首先区分子序列和子串,序列不要求连续性(连续和不连续都可以),但子串一定是连续的 1.最长公共子序列 1.最长公共子序列问题有最优子结构,这个问题可以分解称为更小的问题 2.同时,子问题的解释可以被重 ...
随机推荐
- [转]Oracle left join \ right join
select 1 from a,b where a.id=b.id(+) 等同于 a left join b on a.id=b.id select 1 from a,b where a.id(+)= ...
- 个人测试SQL学习
--普通方法赋值 declare @a int print @a --Update 方法赋值 ) ' print @name --Select 语句赋值 ) ' print @name ) selec ...
- base64 压缩上传上传图片
@{ ViewBag.Title = "dddddddd"; Layout = "~/Areas/Wap/Views/Shared/_Head.cshtml"; ...
- PV、IV、UV
PV 访问量 UV 独立访客 IV 独立ip数 qps 流量
- dubbo常用配置及注意事项
1.启动时检查缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true. 关闭所有服务的启动时检查:(没有提供者时报错 ...
- Merge Into 语句代替Insert/Update在Oracle中的应用实战
动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录 ...
- leetcode每日刷题计划-简单篇day3
收到swe提前批面试hhh算是ep挂了的后续 努力刷题呀争取今年冲进去! Num 21 合并两个有序链表 Merge Two Sorted Lists 注意新开的链表用来输出结果的是ListNode ...
- org.apache.ibatis.builder.IncompleteElementException: Could not find result map java.util.HashMap
这样的配置有问题吗? <select id="getFreightCollectManagementList" resultMap="java.util.HashM ...
- ViewModel学习
ViewModel是一个负责准备和管理Activity或Fragment数据的类.它还处理Activity / Fragment与应用程序其余部分的通信(例如,调用业务逻辑类). 始终与范围(Frag ...
- Mysql 8.0修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';