动态规划-----两个字符串交叉组成第三个字符
来源:互联网 发布:泾川县门户网通知公告 编辑:程序博客网 时间:2024/05/04 15:05
题目:Givens1 ,s2 , s3 , find whethers3 is formed by the interleaving ofs1 ands2 .
For example,
Given:
s1 ="aabcc" ,
s2 ="dbbca" ,
Whens3 ="aadbbcbcac" , return true.
Whens3 ="aadbbbaccc" , return false.
“When you see string problem that is about subsequenceor matching, dynamic programming method should come to your mind naturally.”-----看到字符串操作,首先应该想到DP算法。
大体思路是,s1取一部分s2取一部分,最后是否能匹配s3。
动态规划数组是dp[i][j],表示: s1取前i位(但是第i为之前的字符串也必须是构成s3的),s2取前j位(但是第J位之前的字符串也必须是构成s3的),是否能组成s3的前i+j位。
初始化是,假设s1为空,那么s2每一位跟s3匹配放入dp[0][j];假设s2为空,那么s1每一位跟s3匹配放入dp[i][0]。
相似题目:
s1, s2只有两个字符串,因此可以展平为一个二维地图,判断是否能从左上角走到右下角。
当s1到达第i个元素,s2到达第j个元素:
地图上往右一步就是s2[j-1]匹配s3[i+j-1]。
地图上往下一步就是s1[i-1]匹配s3[i+j-1]。
示例:s1="aa",s2="ab",s3="aaba"。标1的为可行。最终返回右下角。
矩阵中红色的数值1表示dp[s1==0][s2==1]是构成s3的,所以1表示true.
0 a b
0 1 1 0
a 1 1 1
a 1 0 1
这个数组就是dp[i][j]的取值。
class Solution
{
public:
bool isInterleave(string s1,string s2,string s3)
{
int m=s1.size(),n=s2.size();
if(m+n!=s3.size())return false;
vector<vector<bool>>dp(m+1);
for(int i=0;i<=m;i++)
dp[i].resize(n+1);
dp[0][0]=true;
int i=1,j=1;
while(i<=m&&s1[i-1]==s3[i-1])dp[i++][0]=true;
while(j<=n&&s2[j-1]==s3[j-1])dp[0][j++]=true;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
if(dp[i-1][j]&&s1[i-1]==s3[i+j-1]||dp[i][j-1]&&s2[j-1]==s3[i+j-1])
dp[i][j]=true;
return dp[m][n];
}
};
- 动态规划-----两个字符串交叉组成第三个字符
- 字符串交错组成(动态规划)
- 动态规划解决字符串交错组成问题
- 字符串的交错组成 动态规划
- 利用动态规划解决交叉字符串问题
- 动态规划_交叉字符串_1
- 动态规划——交叉字符串
- 49个随机字符组成的字符串
- 1.4-判断两个字符串是否由相同字符组成
- 判断两个字符串是否由相同字符组成
- 判断两个字符串是否由相同的字符组成
- 判断两个字符串是否由相同的字符组成
- 比较组成两个字符串的字符是否一样
- Java 判断两个字符串是否由相同的字符组成
- 判断两个字符串是否由相同字符组成
- 如何判断两个字符串是否由相同的字符组成
- 判断两个字符串是否由相同的字符组成
- 动态规划-交错组成
- jxl导出超过65535数据的通用功能
- ionic入门教程第十八课-初识自定义指令directive oni-bar(tab-bar)
- SVProgressHUD的使用
- eclipse svn忽略classpath、target、.project等
- 在linux内核中读写文件
- 动态规划-----两个字符串交叉组成第三个字符
- Jquery给easyui的表单元素赋值,获取值总结
- 剑指offer面试题 java解答6-10
- Android读取本地存储和SD卡文件
- Web和本地页面同存在一个页面时的计算高度问题
- Java+eclipse的配置
- 【CodeForces】660A - Co-prime Array(水)
- HTML5中video元素事件详解
- Linux小技巧(1)