leetcode-97.-交错字符串

描述

给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。

示例 1:

输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出: true
示例 2:

输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出: false

  

题解1, 暴力法, 通过递归实现,时间复杂度:O(2^{m+n})O(2 m+n) 。 m是 s1 的长度, n是 s2的长度。

空间复杂度:O(m+n)。递归栈的深度最多为 m+n 。

 

class Solution {
    public boolean isInterleave(String s1, String s2, String s3) {
        return is_interlevel(s1, 0, s2, 0, "", s3);
    }

    private boolean is_interlevel(String s1, int i, String s2, int j, String res, String s3 ) {
        if (res.equals(s3) && i == s1.length() && j == s2.length()) {
            return true;
        }

        boolean answer = false;
        if (i < s1.length()) {
            answer = answer | is_interlevel(s1, i+1, s2, j, res + s1.charAt(i), s3);
        } 

        if (j < s2.length()) {
            answer = answer | is_interlevel(s1, i, s2, j+1, res+s2.charAt(j), s3);
        }

        return answer;
    }
}

 

二维动态规划法, 时间复杂度:o(m*n),  空间复杂度:o(m*n)

class Solution {
    public boolean isInterleave(String s1, String s2, String s3) {
        if (s1.length() + s2.length() != s3.length()) {
            return false;
        }

        boolean dp[][] = new boolean[s1.length()+1][s2.length()+1];
        for (int i = 0; i <= s1.length(); i++) {
            for (int j = 0; j <= s2.length(); j++) {
                if (i == 0 && j == 0) {
                    dp[i][j] = true;
                } else if (i == 0) {
                    dp[i][j] = dp[i][j - 1] && s2.charAt(j - 1) == s3.charAt(i + j - 1);
                } else if (j == 0) {
                    dp[i][j] = dp[i - 1][j] && s1.charAt(i - 1) == s3.charAt(i + j - 1);
                } else {
                    dp[i][j] = (dp[i - 1][j] && s1.charAt(i - 1) == s3.charAt(i + j - 1)) || (dp[i][j - 1] && s2.charAt(j - 1) == s3.charAt(i + j - 1));
                }
            }
        }

        return dp[s1.length()][s2.length()];

    }
}

  

参考:https://leetcode-cn.com/problems/interleaving-string/submissions/

posted on 2020-03-18 17:12  wangsong412  阅读(107)  评论(0编辑  收藏  举报