97 Interleaving String
1. Question
Input: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
Output: trueInput: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
Output: false2. Implementation
class Solution {
public boolean isInterleave(String s1, String s2, String s3) {
if (s1.length() + s2.length() != s3.length()) {
return false;
}
Boolean[][] cache = new Boolean[s1.length() + 1][s2.length() + 1];
return isInterleave(s1, s2, s3, 0, 0, cache);
}
public boolean isInterleave(String s1, String s2, String s3, int p1, int p2, Boolean[][] cache) {
if (p1 + p2 == s3.length()) {
return true;
}
if (cache[p1][p2] != null) {
return cache[p1][p2];
}
boolean match1 = p1 < s1.length() && s1.charAt(p1) == s3.charAt(p1 + p2);
boolean match2 = p2 < s2.length() && s2.charAt(p2) == s3.charAt(p1 + p2);
boolean isValid = false;
if (match1 && match2) {
isValid = isInterleave(s1, s2, s3, p1 + 1, p2, cache)
|| isInterleave(s1, s2, s3, p1, p2 + 1, cache);
}
else if (match1) {
isValid = isInterleave(s1, s2, s3, p1 + 1, p2, cache);
}
else if (match2) {
isValid = isInterleave(s1, s2, s3, p1, p2 + 1, cache);
}
else {
isValid = false;
}
cache[p1][p2] = isValid;
return isValid;
}
}3. Time & Space Complexity
Last updated