动态规划_交叉字符串_1
来源:互联网 发布:同志交友软件 编辑:程序博客网 时间:2024/05/18 12:42
1. 【问题描述】 交叉字符串
2. 【思路】 参考:LintCode-交叉字符串
令S_i表示字符串S的前i(i>=1)个字符组成的子串,dp[i][j]是一个bool型的变量,dp[i][j]=true表示字符串S3_i+j可以由S1_i和S2_j交叉构成;dp[i][j]=false表示字符串S3_i+j不能由S1_i和S2_j交叉构成。令dp是一个(S1.size()+1) *(S2.size()+1)的二维数组,首先初始化dp[0[0]=true,dp[0][j]=dp[0][j-1]&&(S3[j-1]==s2[j-1]), (j=1,2,...,S2.size()),dp[i][0]=dp[i-1][0]&&(S3[i-1]==S1[i-1])(i=1,2,...S1.size())。则有:
(1).s3[i+j-1]==s1[i-1]==s2[j-1],则dp[i][j]=dp[i-1][j]||dp[i][j-1];
(2).s3[i+j-1]==s1[i-1]!=s2[j-1],则dp[i][j]=dp[i-1][j];
(3).s3[i+j-1]==s2[j-1]!=s1[i-1]。则dp[i][j]=dp[i][j-1];
(4).(s3[i+j-1]!=s1[i-1])并且(s3[i+j-1]!=s2[j-1]),则dp[i][j]=false;
根据以上分析,可以使用动态规划算法求解。
3.【代码】
class Solution {public: /** * Determine whether s3 is formed by interleaving of s1 and s2. * @param s1, s2, s3: As description. * @return: true of false. */ bool isInterleave(string s1, string s2, string s3) { // write your code here int len1=s1.size(),len2=s2.size(),len3=s3.size(); if(len3!=len1+len2) { return false; } vector<bool> ele(len2+1,false); vector<vector<bool>> dp(len1+1,ele); dp[0][0]=true; for(int i=1;i<=len1;++i) { dp[i][0]=dp[i-1][0]&&(s1[i-1]==s3[i-1]);//look } for(int j=1;j<=len2;++j) { dp[0][j]=dp[0][j-1]&&(s2[j-1]==s3[j-1]);//look } for(int i=1;i<=len1;++i) { for(int j=1;j<=len2;++j) { if(s3[i+j-1]==s1[i-1]) { if(s3[i+j-1]==s2[j-1]) { dp[i][j]=dp[i][j-1]||dp[i-1][j]; } else { dp[i][j]=dp[i-1][j]; } }//if else if(s3[i+j-1]==s2[j-1]) { dp[i][j]=dp[i][j-1]; } else { dp[i][j]=false; } }//for }//for return dp[len1][len2]; }};
- 动态规划_交叉字符串_1
- 动态规划_最大子数组|||_1
- 动态规划_最大子数组||_1
- 动态规划_最长公共子序列_1
- 动态规划_买卖股票的最佳时机|||_1
- 利用动态规划解决交叉字符串问题
- 动态规划——交叉字符串
- 动态规划-----两个字符串交叉组成第三个字符
- 0_1 背包动态规划详解
- 动态规划之0_1背包
- 动态规划解决0_1背包问题
- 数据结构_动态规划
- 动态规划_总结
- 动态规划_初始
- 报数_动态规划
- 合法字符串 【动态规划】
- 字符串计数(动态规划)
- 回文字符串-动态规划
- 26张图看清扎克伯格如何提高工作效率
- #Directx12基本的Graphics概念和Direct3D类型(-)
- 慕课网学习笔记之数据结构队列(C++)
- R语言|数据预处理--5异常值分析及处理
- lamp、lnmp和lnamp,到底应该选择哪个?
- 动态规划_交叉字符串_1
- 据说这是世界上最深的网站,拉到底就算你赢了
- 161004复习与回顾
- 动态内存分配
- Java经典面试题 一
- JAVA进阶6.8——生产消费问题
- 【2】SpringBoot的MyBatis配置
- C Primer Plus学习 十 if语句
- Node.js[0] 准备工作