题目传送:https://leetcode.cn/problems/interleaving-string/
运行效率
代码如下
class Solution {
int[][] f = null;
//递归解法
public boolean isInterleave(String s1, String s2, String s3) {
if (f == null) {
f = new int[s1.length() + 1][s2.length() + 1];
}
if (f[s1.length()][s2.length()] != 0) {
return f[s1.length()][s2.length()] == 1;
}
// 处理边界情况
if (s1.length() + s2.length() != s3.length()) {
return false;
}
if ("".equals(s1)) {
return s2.equals(s3);
}
if ("".equals(s2)) {
return s1.equals(s3);
}
char c1 = s1.charAt(s1.length() - 1);
char c2 = s2.charAt(s2.length() - 1);
char c3 = s3.charAt(s3.length() - 1);
boolean result = false;
if (c1 == c3) {
boolean interleave =
isInterleave(s1.substring(0, s1.length() - 1), s2, s3.substring(0, s3.length() - 1));
if (interleave) {
f[s1.length() - 1][s2.length()] = 1;
f[s1.length()][s2.length()] = 1;
result = true;
} else {
f[s1.length() - 1][s2.length()] = -1;
}
}
if (c2 == c3) {
boolean interleave =
isInterleave(s1, s2.substring(0, s2.length() - 1), s3.substring(0, s3.length() - 1));
if (interleave) {
f[s1.length()][s2.length() - 1] = 1;
f[s1.length()][s2.length()] = 1;
result = true;
} else {
f[s1.length()][s2.length() - 1] = -1;
}
}
f[s1.length()][s2.length()] = -1;
return result;
}
}