问题描述
递归
拿到这个问题的第一反应就是递归:假设 s1 的第一个字符和 s3 的第一个字符相等,那么问题就转化为去掉第一个字符的 s1 和完整的 s2 能否交错组成去掉第一个字符的 s3。以此类推,只要最终 s1,s2,s3 能完全匹配就返回 true,如果递归遍历所有情况都不存在解就返回 false。最后需要注意可以先通过长度判断去掉一些不可能返回 true 的情况。
public boolean isInterleave(String s1, String s2, String s3) {
int length1 = s1.length(), length2 = s2.length(), length3 = s3.length();
if (length1 + length2 != length3) {
return false;
}
return echo(s1, s2, s3);
}
private boolean echo(String s1, String s2, String s3) {
if (s1.length() == 0) {
return s2.equals(s3);
}
if (s2.length() == 0) {
return s1.equals(s3);
}
if (s1.charAt(0) == s3.charAt(0) && echo(s1