美文网首页
子序列——字符串是否由两个字符串交错构成(八)

子序列——字符串是否由两个字符串交错构成(八)

作者: 旺叔叔 | 来源:发表于2018-11-13 18:26 被阅读0次

LeetCode_97_InterleavingString

题目分析:

  Ø d b b c a
Ø T F F F F F
a T F F F F F
a T T T T T F
b F T T F T F
c F F T T T T
c F F F T F T
横向扫描,也就是对于s3中每次新增的字符,s1或者s2中任意一个能取出来匹配就是T,否则F。
也就是上方或者左方至少一个为T就是T。
dp[i][j] = (dp[i - 1][j] && s1.charAt(i - 1) == s3.charAt(i - 1 + j))
           ||
           (dp[i][j - 1] && s2.charAt(j - 1) == s3.charAt(j - 1 + i));
初始项dp[0][0]为true,因为此刻s1,s2,s3都是空串。
然后第一列和第一行分别比较对应s1和s3对应位置的值,如果相等就是T,
如果产生任何一个不相等,之后的都不相等。

解法:

public static boolean isInterleave(String s1, String s2, String s3) {
    if (s1.length() + s2.length() != s3.length()) return false;
    int n1 = s1.length();
    int n2 = s2.length();
    boolean[][] dp = new boolean[n1 + 1][n2 + 1];
    dp[0][0] = true;
    for (int i = 1; i <= n1; ++i) {
        dp[i][0] = dp[i - 1][0] && (s1.charAt(i - 1) == s3.charAt(i - 1));
    }
    for (int i = 1; i <= n2; ++i) {
        dp[0][i] = dp[0][i - 1] && (s2.charAt(i - 1) == s3.charAt(i - 1));
    }
    for (int i = 1; i <= n1; ++i) {
        for (int j = 1; j <= n2; ++j) {
            dp[i][j] =
                    (dp[i - 1][j] && s1.charAt(i - 1) == s3.charAt(i - 1 + j))
                    ||
                    (dp[i][j - 1] && s2.charAt(j - 1) == s3.charAt(j - 1 + i));
        }
    }
    return dp[n1][n2];
}

相关文章

  • 子序列——字符串是否由两个字符串交错构成(八)

    LeetCode_97_InterleavingString 题目分析: 解法:

  • 1143. Longest Common Subsequence

    给定两个字符串,返回两个字符串的最长公共子序列,如果不存在公共子序列,返回0。 子序列是指,是由原字符串在不改变相...

  • 字符串、数组、切片

    字符串 字符串是一个不可改的字符序列创建的字符串由两个字构成。指向实际[]byte类型字符串的指针 和 字符串长度...

  • LeetCode-392-判断子序列

    判断子序列 题目描述:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除...

  • 最大公共子序列(LCS)

    子序列 子序列不要求字符连续(这与串不同) 公共子序列 两个字符串中的相同的子序列 最大公共子序列的例子字符串 X...

  • Swift学习笔记-String

    在Swift中,String由字符构成,而字符由一个或多个Unicode标量构成 遍历字符串字符 判断字符串是否为...

  • 2018-08-09

    动态规划之最长公共子序列 问题描述 给定两个字符串,求解两个字符串的最长公共子序列。比如字符串1:BDCABA;字...

  • LeetCode-459-重复的子字符串

    重复的子字符串 题目描述:给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英...

  • LeetCode 392. 判断子序列

    题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删...

  • 459-重复的子字符串

    重复的子字符串 题目 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字...

网友评论

      本文标题:子序列——字符串是否由两个字符串交错构成(八)

      本文链接:https://www.haomeiwen.com/subject/eyglfqtx.html