【Leecode】Leecode刷题之路第97天之交错字符串

Scroll Down

题目出处

97-交错字符串-题目出处

题目描述

97-交错字符串-题目描述

个人解法

思路:

todo

代码示例:(Java)

todo

复杂度分析

todo

官方解法

97-交错字符串-官方解法

方法1:动态规划

思路:

97-交错字符串-动态规划-思路1

class Solution {
  public boolean isInterleave(String s1, String s2, String s3) {
    int n = s1.length(), m = s2.length(), t = s3.length();

    if (n + m != t) {
      return false;
    }

    boolean[][] f = new boolean[n + 1][m + 1];

    f[0][0] = true;
    for (int i = 0; i <= n; ++i) {
      for (int j = 0; j <= m; ++j) {
        int p = i + j - 1;
        if (i > 0) {
          f[i][j] = f[i][j] || (f[i - 1][j] && s1.charAt(i - 1) == s3.charAt(p));
        }
        if (j > 0) {
          f[i][j] = f[i][j] || (f[i][j - 1] && s2.charAt(j - 1) == s3.charAt(p));
        }
      }
    }

    return f[n][m];
  }
}


97-交错字符串-动态规划-思路2

代码示例:(Java)

public class Solution1 {
    public boolean isInterleave(String s1, String s2, String s3) {
        int n = s1.length(), m = s2.length(), t = s3.length();

        if (n + m != t) {
            return false;
        }

        boolean[] f = new boolean[m + 1];

        f[0] = true;
        for (int i = 0; i <= n; ++i) {
            for (int j = 0; j <= m; ++j) {
                int p = i + j - 1;
                if (i > 0) {
                    f[j] = f[j] && s1.charAt(i - 1) == s3.charAt(p);
                }
                if (j > 0) {
                    f[j] = f[j] || (f[j - 1] && s2.charAt(j - 1) == s3.charAt(p));
                }
            }
        }

        return f[m];
    }


}

复杂度分析

97-交错字符串-动态规划-复杂度分析

考察知识点

收获

Gitee源码位置

97-交错字符串-源码

同名文章,已同步发表于CSDN,个人网站,公众号