LeetCode-097-交錯字串
阿新 • • 發佈:2021-11-10
交錯字串
題目描述:給定三個字串
s1
、s2
、s3
,請你幫忙驗證s3
是否是由s1
和s2
交錯 組成的。示例說明請見LeetCode官網。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/interleaving-string/
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解法一:遞迴
- 如果字串長度都為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")); } }
【每日寄語】 碰到逆境時,應心生感激,這是可遇不可求啊!