交错字符串——动态规划
来源:互联网 发布:淘宝一件代发平台 编辑:程序博客网 时间:2024/05/17 20:31
题目描述:
给定三个字符串A, B, C,判断C是否由A和B交错构成。交错构成的意思是,对于字符串C,可以将其每个字符标记为A类或B类,使得我A类的每个字符顺序构成了A字符串,B类的每个字符顺序构成了B字符串。如:对于A=”rabbit” B=”mq”, ”rabmbitq”是由A和B交错构成的,但”rabbqbitm”不是由A和B交错构成。
解题思路:
1、直接顺序比较,从C中依次拿掉A,看剩下的是不是等于B,若是则返回true,否则,返回false. 但是如果A和B中有相同的字符,则这种方法会出错。
例如,A=“aa”, B=“ab”,C=“aaba” 这种情况下,上述这种方法会返回false,但实际上它是true。 因此这种方法不可行。
2、采用动态规划的方法
定义状态:dp[i][j] 代表是A的前i个字符与C中匹配,B中前j个字符与C中匹配.
递推的比较过程中如果知道s1,s2上的指针p,q的情况,s3上这个指针肯定在p+q的位置。利用这个结论,就可以设计出O(m1*m2)的DP方案。
执行操作分为两步,分别判断:
A[i-1] == C[i+j-1] 为真,则 dp[i][j] = dp[i][j] || dp[i-1][j]
B[j-1] == C[i+j-1] 为真,则dp[i][j] = dp[i][j] || dp[i][j-1]
最后返回:dp[i][j],此时,i=s1.lenth(), j=s2.length()
参考代码:
#include"iostream"#include"vector"using namespace std;class Solution{public:bool isInterleave(string s1, string s2, string s3){size_t len1, len2;len1 = s1.length();len2 = s2.length();if (len1 + len2 != s3.length())return false;vector<vector<bool>> dp;//定义变量dp.resize(len1 + 1, vector<bool>(len2 + 1, false));//分配空间dp[0][0] = true;for (int i = 0; i <= len1 ;i++)for (int j = 0; j <= len2 ; j++){if (i == 0 && j == 0) continue;if (i>0){if (s1[i - 1] == s3[i + j - 1]){dp[i][j] = dp[i][j] || dp[i - 1][j];}}if (j>0){if (s2[j - 1] == s3[i + j - 1]){dp[i][j] = dp[i][j] || dp[i][j - 1];}}}bool result = dp[len1][len2];return result;}};int main(){Solution S;string s1 = "aa";string s2 = "ab";string s3 = "aaba";bool ans = S.isInter(s1, s2, s3);if (ans)cout << "true" << endl;elsecout << "false" << endl;}
这道题目跟最长公共子序列有点相似,思路类似,稍作变换.
LCS是判断一个串,这个题目是同时判断两个串。
0 0
- 交错字符串——动态规划
- 动态规划——字符串的交错组成
- 动态规划——字符串的交错组成(interleaving-string)
- 字符串交错组成(动态规划)
- 动态规划解决字符串交错组成问题
- 字符串的交错组成 动态规划
- 【动态规划】交错重排
- 动态规划-交错组成
- 递归与动态规划---字符串的交错组成
- 动态规划交错匹配问题
- 动态规划——字符串编辑问题
- 动态规划——交叉字符串
- 字符串、动态规划——最长公共子串LCS
- 动态规划—求最长字符串子序列
- 动态规划——什么是动态规划?
- 合法字符串 【动态规划】
- 字符串计数(动态规划)
- 回文字符串-动态规划
- iOS 远程推送的详细配置
- shell 脚本的执行
- dojo学习网址
- 闭包,懂不懂由你,反正我是懂了
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- 交错字符串——动态规划
- vim高亮
- CodeForces 3C Tic-tac-toe 井字棋盘游戏
- Android Studio 发生 Couldn't load jpush175 from loader dalvik.system.PathClassLoader 异常
- 软件乘法
- HOG介绍3
- 获取当前具有输入焦点控件的窗口句柄
- Uva 10881 - Piotr's Ants
- MVC 简单的POST局部刷新