博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最长公共子序列问题 (LCS)
阅读量:6312 次
发布时间:2019-06-22

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

 给定两个字符串S和T.求出这两个字符串最长的公共子序列的长度.

输入:

n=4

m=4

s="abcd"

t="becd"

 

输出:

3("bcd")

 

这类问题被称为最长公共子序列问题(LCS,Longest Common Subsequence)的著名问题.

                     max(dp[i][j]+1,dp[i][j+1],dp[i+1][j])   (s=t)

dp[i+1][j+1]=

                      max(dp[i][j+1],dp[i+1][j])                  (其他)

 

 

这个递推式可用O(nm)计算出来,dp[n][m]就是LCS的长度.

 

 

j\i

0

1{b}

2{e}

3{c}

4{d}

0

0

0

0

0

0

1{a}

0

0

0

0

0

2{b}

0

1

1

1

1

3{c}

0

1

1

2

2

4{d}

0

1

1

2

3

 

 

1 int n,m; 2 char s[MAX],t[MAX]; 3 int dp[MAX][MAX];   //DP数组 4  5 void solve() 6 { 7     for(int i=0; i<=n; i++){ 8         for(int j=0; j<=m; j++){ 9             if(s[i]==t[j]){10                 dp[i+1][j+1]=dp[i][j]+1;11             }12             else{13                 dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);14             }15         }16     }17     printf("%d\n",dp[n][w]);18 }

 

 

 

 

 

 

 

<<挑战程序设计竞赛>>读后感

转载于:https://www.cnblogs.com/wangmengmeng/p/5232221.html

你可能感兴趣的文章
Android LRecyclerView实现下拉刷新,滑动到底部自动加载更多
查看>>
梦想还需有,因它必实现——发现最新版iOS漏洞,OverSky团队专访
查看>>
spring mvc xml配置拦截器
查看>>
网页设计DIV+CSS——第1 天:选择什么样的DOCTYPE
查看>>
ORA-01017: invalid username/password; logon denied
查看>>
TNS-12533: TNS:illegal ADDRESS parameters
查看>>
农民伯伯 谈 接口 [interface]
查看>>
iscsi网络存储介绍及客户端配置操作
查看>>
C# 视频监控系列(10):服务器端——验证、设置画面质量、字幕叠加、板卡序列号...
查看>>
Python简单实现基于VSM的余弦相似度计算
查看>>
Hadoop专业解决方案-第13章 Hadoop的发展趋势
查看>>
Grand Central Dispatch (GCD)
查看>>
Oracle VM VirtualBox配置文件
查看>>
猫都能学会的Unity3D Shader入门指南(二)
查看>>
玩聚的Tweet&Blog墙 X
查看>>
URL中的特殊字符
查看>>
UITableView与UIScrollView的一些问题(持续更新)
查看>>
内存四区分析
查看>>
我的六年软件测试感悟
查看>>
autocomplete实现联想输入,自动补全
查看>>