[leetcode] 97. 交错字符串
Posted ACBingo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[leetcode] 97. 交错字符串相关的知识,希望对你有一定的参考价值。
题不难,dfs加回溯即可。实际上就是暴力搜索,穷举所有选择路径。
以s3的每一个字母做一个状态,就面临两个抉择,选s1还是选s2。选s1路不通的话,回溯回来改选s2即可。
class Solution {
// 状态:String s1, String s2, String s3, int p, int q, int i
// p为当前s1的下标指针,q为当前s2的下标指针,i为s3的
boolean dfs(String s1, String s2, String s3, int p, int q, int i) {
if (i >= s3.length()) {
return p >= s1.length() && q >= s2.length();
}
char ch = s3.charAt(i);
if (p < s1.length() && ch == s1.charAt(p)) {
if (!dfs(s1, s2, s3, p + 1, q, i + 1)) {
if (q < s2.length() && ch == s2.charAt(q)) {
return dfs(s1, s2, s3, p, q + 1, i + 1);
}
} else {
return true;
}
} else if (q < s2.length() && ch == s2.charAt(q)) {
return dfs(s1, s2, s3, p, q + 1, i + 1);
}
return false;
}
public boolean isInterleave(String s1, String s2, String s3) {
if (s1.length()+s2.length() != s3.length()) return false;
return dfs(s1, s2, s3, 0, 0, 0);
}
}
以上是关于[leetcode] 97. 交错字符串的主要内容,如果未能解决你的问题,请参考以下文章