[leetcode] 97. 交錯字串
阿新 • • 發佈:2018-11-04
題不難,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); } }