97. Interleaving String
2018-02-23 18:11
253 查看
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. Subscribe to see which companies asked this question. DP解法: 关于DP里矩阵每一个格子所代表的意义看下面这一个图 (以下描述为 1 base) dp[i][j]表示s1取前i位,s2取前j位,是否能组成s3的前i+j位 举个列子,注意左上角那一对箭头指向的格子dp[1][1], 表示s1取第1位a, s2取第1位d,是否能组成s3的前两位aa 从dp[0][1] 往下的箭头表示,s1目前取了0位,s2目前取了1位,我们添加s1的第1位,看看它是不是等于s3的第2位,( i + j 位) 从dp[1][0] 往右的箭头表示,s1目前取了1位,s2目前取了0位,我们添加s2的第1位,看看它是不是等于s3的第2位,( i + j 位) 那什么时候取True,什么时候取False呢? False很直观,如果不等就是False了嘛。 那True呢?首先第一个条件,新添加的字符,要等于s3里面对应的位( i + j 位),第二个条件,之前那个格子也要等于True 举个简单的例子s1 = ab, s2 = c, s3 = bbc ,假设s1已经取了2位,c还没取,此时是False(ab!=bb),我们取s2的新的一位c,即便和s3中的c相等,但是之前是False,所以这一位也是False 同理,如果s1 = ab, s2 = c, s3=abc ,同样的假设,s1取了2位,c还没取,此时是True(ab==ab),我们取s2的新的一位c,和s3中的c相等,且之前这一位就是True,此时我们可以放心置True (abc==abc) class Solution { public: bool isInterleave(string s1, string s2, string s3) { if(s1.length()+s2.length() != s3.length()) return false; int m = s1.length(); int n = s2.length(); vector<vector<bool>> dp(m+1, vector<bool>(n+1, false)); dp[0][0] = true; for(int i = 1;i<m+1;i++){ if(s1[i-1] == s3[i-1] && dp[i-1][0]){ dp[i][0] = true; } } for(int j = 1;j<n+1;j++){ if(s2[j-1] == s3[j-1] && dp[0][j-1]){ dp[0][j] = true; } } for(int i =1;i<m+1;i++){ for(int j =1;j<n+1;j++){ if(s1[i-1] == s3[i+j-1] && dp[i-1][j]){ dp[i][j] = true; } if(s2[j-1] == s3[i+j-1] && dp[i][j-1]){ dp[i][j] = true; } } } return dp[m] ; } };
相关文章推荐
- LeetCode 97 Interleaving String(Python详解及实现)
- LeetCode力扣之97. Interleaving String
- 97. Interleaving String
- 97. Interleaving String
- leetcode || 97、Interleaving String
- 【leetcode】String——Interleaving String(97)
- 97. Interleaving String
- 97. Interleaving String
- LeetCode(97) Interleaving String(动态规划)
- 97. Interleaving String
- LeetCode 97 Interleaving String
- LeetCode 97: Interleaving String 字符串交错
- 97. Interleaving String
- 97. Interleaving String
- Leetcode-97 Interleaving String
- LeetCode 97(Interleaving String)Java
- [LeetCode 97] Interleaving String(Python)
- 97. Interleaving String
- LeetCode 97 — Interleaving String (C++ Python)
- 97. Interleaving String