交錯字串
題目描述:給定三個字串
s1
、s2
、s3
,請你幫忙驗證s3
是否是由s1
和s2
交錯 組成的。示例說明請見LeetCode官網。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解法一:遞迴
- 如果字串長度都為0時,直接返回true;
- 當s1的長度和s2的長度之和不等於s3的長度時,直接返回false;
- 當s1的長度為0即s1已經遍歷完了,直接判斷s2和s3是否相等;
- 當s2的長度為0即s2已經遍歷完了,直接判斷s1和s3是否相等;
- 後面根據s1和s2的第一個字元是否和s3的第一個字元是否相等,遞迴呼叫該方法進行判斷。
package com.kaesar.leetcode.LeetCode_051_100;
public class LeetCode_097 {
/**
* 遞迴
*
* @param s1
* @param s2
* @param s3
* @return
*/
public static boolean isInterleave(String s1, String s2, String s3) {
// 當字串長度都為0時,直接返回true
if (s1.length() == 0 && s2.length() == 0 && s3.length() == 0) {
return true;
}
// 當s1的長度和s2的長度之和不等於s3的長度時,直接返回false
if (s1.length() + s2.length() != s3.length()) {
return false;
}
// 當s1的長度為0即s1已經遍歷完了,直接判斷s2和s3是否相等
if (s1.length() == 0) {
return s2.equals(s3);
}
// 當s2的長度為0即s2已經遍歷完了,直接判斷s1和s3是否相等
if (s2.length() == 0) {
return s1.equals(s3);
}
if (s1.charAt(0) == s3.charAt(0) && s2.charAt(0) == s3.charAt(0)) {
// 遞迴處理s1的下一個字元和s2和s3的下一個字元 && 遞迴處理s1和s2的下一個字元和s3的下一個字元
return isInterleave(s1.substring(1), s2, s3.substring(1)) || isInterleave(s1, s2.substring(1), s3.substring(1));
} else if (s1.charAt(0) == s3.charAt(0)) {
// 遞迴處理s1的下一個字元和s2和s3的下一個字元
return isInterleave(s1.substring(1), s2, s3.substring(1));
} else if (s2.charAt(0) == s3.charAt(0)) {
// 遞迴處理s1和s2的下一個字元和s3的下一個字元
return isInterleave(s1, s2.substring(1), s3.substring(1));
} else {
// 當s1和s2的下一個字元和s3的下一個字元都不相等時,直接返回false
return false;
}
}
public static void main(String[] args) {
System.out.println(isInterleave("aabcc", "dbbca", "aadbbcbcac"));
}
}
【每日寄語】 碰到逆境時,應心生感激,這是可遇不可求啊!