Double Sequence II¶
Description¶
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.
Question Link¶
https://leetcode.com/problems/interleaving-string/description/
Example I:¶
Input: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
Output: true
Example II:¶
Input: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
Output: false
Questions¶
- LeetCode - 97. Interleaving String
Transform Function¶
for(int i = 0; i <= m; i++) { for(int j = 0; j <= n; j++) { if(i == 0 && j == 0) continue; if(i == 0) { dp[i][j] = dp[i][j - 1] && s2.charAt(j - 1) == s3.charAt(i + j - 1); }else if(j == 0) { dp[i][j] = dp[i - 1][j] && s1.charAt(i - 1) == s3.charAt(i + j - 1); }else { dp[i][j] = dp[i - 1][j] && s1.charAt(i - 1) == s3.charAt(i + j - 1) || dp[i][j - 1] && s2.charAt(j - 1) == s3.charAt(i + j - 1); } } }
Solution¶
class Solution { public boolean isInterleave(String s1, String s2, String s3) { if (s3.length() != s1.length() + s2.length()) { return false; } int m = s1.length(), n = s2.length(); boolean[][] dp = new boolean[m + 1][n + 1]; dp[0][0] = true; for(int i = 0; i <= m; i++) { for(int j = 0; j <= n; j++) { if(i == 0 && j == 0) continue; if(i == 0) { dp[i][j] = dp[i][j - 1] && s2.charAt(j - 1) == s3.charAt(i + j - 1); }else if(j == 0) { dp[i][j] = dp[i - 1][j] && s1.charAt(i - 1) == s3.charAt(i + j - 1); }else { dp[i][j] = dp[i - 1][j] && s1.charAt(i - 1) == s3.charAt(i + j - 1) || dp[i][j - 1] && s2.charAt(j - 1) == s3.charAt(i + j - 1); } } } return dp[m][n]; } }