LeetCode Interleaving String
来源:互联网 发布:python编程入门 第3版 编辑:程序博客网 时间:2024/04/29 08:14
题目
Given s1, s2, s3, find whether s3 is formed by the interleaving ofs1 and s2.
For example,
Given:
s1 = "aabcc"
,
s2 = "dbbca"
,
When s3 = "aadbbcbcac"
, return true.
When s3 = "aadbbbaccc"
, return false.
判断s3是否可以有s1,s2由前向后交错取字符构成。
不难想到递归版本,但是特殊情况下:s1,s2重复较多时效率很低,必然超时。
其实即是一个子问题重复调用的问题,通过表格记录可以稍稍提高效率,即可AC。
更高效的方法dp。
flag[i][j]记录s1[i]开始、s2[j]开始的两个子串是否可以和s3[i+j]开始的子串匹配。
如果s1[i]==s3[i+j]且s1[i+1]开始、s2[j]开始的子串和s3[i+j+1]开始的子串匹配;
或者s2[j]==s3[i+j]且s1[i]开始、s2[j+1]开始的子串和s3[i+j+1]开始的子串匹配;
则s1[i]开始、s2[j]开始的两个子串可以和s3[i+j]开始的子串匹配。
由s3尾向前递推。
代码:
class Solution {public: bool isInterleave(string s1, string s2, string s3) {if(s3.size()!=s1.size()+s2.size())return false;vector<vector<bool>> flag(s1.size()+1,vector<bool>(s2.size()+1,false));//s1[p1],s2[p2]开始的串可以和s3[p1+p2]开始的串匹配的标志flag[s1.size()][s2.size()]=true;//超尾可以匹配for(int len=1;len<=s3.size();len++)//dp,s[3]长度递增,从后向前扫描{for(int i=0;i<=min(len,(int)s1.size());i++)//s1使用的长度递增{int j=len-i;//确定s2需要的长度if(j>s2.size())continue;if(i==0)//仅用s2匹配{if(flag[s1.size()][s2.size()-j+1]&&s2[s2.size()-j]==s3[s3.size()-len])flag[s1.size()][s2.size()-j]=true;}else if(j==0)//仅用s1匹配{if(flag[s1.size()-i+1][s2.size()]&&s1[s1.size()-i]==s3[s3.size()-len])flag[s1.size()-i][s2.size()]=true;}else if(s1[s1.size()-i]==s3[s3.size()-len]&&flag[s1.size()-i+1][s2.size()-j])//s1[p1+1],s2[p2]可以匹配,且s1[p1]==s3[p3]flag[s1.size()-i][s2.size()-j]=true;else if(s2[s2.size()-j]==s3[s3.size()-len]&&flag[s1.size()-i][s2.size()-j+1])//s1[p1],s2[p2+1]可以匹配,且s2[p2]==s3[p3]flag[s1.size()-i][s2.size()-j]=true;}}return flag[0][0]; }};
0 0
- LeetCode: Interleaving String
- LeetCode Interleaving String
- LeetCode: Interleaving String
- [Leetcode] Interleaving String
- [LeetCode] Interleaving String
- leetcode 68: Interleaving String
- [Leetcode] Interleaving String
- LeetCode - Interleaving String
- [LeetCode]Interleaving String
- LeetCode: Interleaving String
- Leetcode: Interleaving String
- [Leetcode]Interleaving String
- Leetcode: Interleaving String
- LeetCode:Interleaving String
- LeetCode-Interleaving String
- [leetcode] Interleaving String@DP
- LeetCode:Interleaving String
- LeetCode - Interleaving String
- synchornized
- Remove all nodes which don’t lie in any path with sum>= k
- 拥有自己的域名的重要性.
- 函数浅析
- Restrictions
- LeetCode Interleaving String
- Spark&Spark性能调优实战(zhuan)
- 求最大公约数和最小公倍数(辗转相除法)
- ApkTool在Mac上的安装和使用
- Mysql自动生成javabean
- hash百度面试题
- 创建Huffman(数据结构)
- 配置Log4j日志
- Linux环境变量的设置和查看方法