LeetCode-097-交錯字串

雄獅虎豹發表於2021-11-16

交錯字串

題目描述:給定三個字串 s1s2s3,請你幫忙驗證 s3 是否是由 s1s2 交錯 組成的。

示例說明請見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"));
    }
}
【每日寄語】 碰到逆境時,應心生感激,這是可遇不可求啊!

相關文章