LeetCode No.97 Interleaving String
来源:互联网 发布:该域名升级访问中 编辑:程序博客网 时间:2024/05/16 03:38
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.
For example,
Given:
s1 = "aabcc"
,
s2 = "dbbca"
,
When s3 = "aadbbcbcac"
, return true.
When s3 = "aadbbbaccc"
, return false.
===================================================================
题目链接:https://leetcode.com/problems/interleaving-string/
题目大意:判断s3是否由s1和s2构成。
思路:有两种做法,第一种是递归(超时),第二种是动归DP。
动态规划思路:
假设s1长度为n,s2长度为m。
使用二维bool数组dp[n][m],其中dp[i][j] 表示用s1的前i个(0 - i-1)和s2的前j个(0 - j-1)能否到达。
如样例所示,可以画成下面这张表
只需判断能否到达dp[n][m]即可。
参考代码:
class Solution {public: bool isInterleave(string s1, string s2, string s3) { int n = s1.size() , m = s2.size() , s = s3.size() , i = 0 , j = 0 ; if ( s != n + m ) return false ; vector < vector <bool> > dp ( n + 1 , vector <bool> ( m + 1 , false ) ) ; // dp[i][j] 表示用s1的前i个(0 - i-1)和s2的前j个(0 - j-1)能否到达 for ( int i = 0 ; i <= n ; i ++ ) { for ( int j = 0 ; j <= m ; j ++ ) { if ( i == 0 && j == 0 ) dp[i][j] = true ; else if ( i == 0 ) { if ( dp[i][j-1] ) dp[i][j] = s2[j-1] == s3[j-1] ? true : false ; } else if ( j == 0 ) { if ( dp[i-1][j] ) dp[i][j] = s1[i-1] == s3[i-1] ? true : false ; } else { dp[i][j] = ( dp[i-1][j] && s1[i-1] == s3[i+j-1] || dp[i][j-1] && s2[j-1] == s3[i+j-1] ) ; } } } return dp[n][m] ; }};
class Solution {public: bool isInterleave(string s1, string s2, string s3) { int n = s1.size() , m = s2.size() , s = s3.size() , i = 0 , j = 0 ; if ( s != n + m ) return false ; vector < vector <int> > record ; for ( int k = 0 ; k < s ; k ++ ) { if ( i < n && s1[i] == s3[k] ) { if ( j < m && s2[j] == s3[k] ) { vector <int> temp ; temp.push_back ( k ) ; temp.push_back ( i ) ; temp.push_back ( j + 1 ) ; record.push_back ( temp ) ; } i ++ ; } else if ( j < m && s2[j] == s3[k] ) { j ++ ; } else { if ( record.empty() ) return false ; vector <int> temp = record.back() ; record.pop_back() ; k = temp[0] ; i = temp[1] ; j = temp[2] ; } } return true ; }};
0 0
- LeetCode No.97 Interleaving String
- LeetCode 97 Interleaving String
- LeetCode(97) Interleaving String
- [leetcode 97] Interleaving String
- [leetcode] 97 Interleaving String
- 【LeetCode】【97】Interleaving String
- leetcode || 97、Interleaving String
- [leetcode 97]Interleaving String
- leetcode 97: Interleaving String
- leetCode 97:Interleaving String
- Leetcode-97 Interleaving String
- Leetcode 97 Interleaving String
- LeetCode 97 Interleaving String
- Leetcode 97, Interleaving String
- Leetcode Interleaving String 97
- [Leetcode] #97 Interleaving String
- Leetcode 97Interleaving String
- [leetcode-97]Interleaving String(java)
- JAVA使用FTPClient类获取linux上的文件最后修改日期少了8小时
- 采用邻接矩阵实现有向网的存储,建立有向网,并实现单源最短路径
- C#在XP系统下调用C++ dll时报找不到指定模块
- DataGridView左键选中行改变行背景色,右键选中行不改变背景色。左键选中行的背景色不变
- phpstorm 2016.2 学习笔记
- LeetCode No.97 Interleaving String
- canvas画正六边形
- AndroidStudio生成自定义的混淆jar包(同时将assets目录打入jar包)(二)(by 星空武哥)
- D3.js Scale 和Axis
- 第一次上这个网站,希望能坚持
- 前端实际应用过程的问题总结
- 格式化输入(scanf)输出(printf)函数
- obs-studio的源
- C语言对字符串的操作