交叉字符串/队列

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/m0_37750720/article/details/82532274

描述

给出三个队列 s1,s2,s3 ,判断 s3 是否是由 s1 和 s2 交叉得来。 如:s1 为 aabcc , s2 为 dbbca。 当 s3 为 aadbbcbcac 时,返回 true(即将 s1 拆成三部分: aa,bc,c 分别插入 s2 对应位置) 否则返回 false。

输入样例

aabcc,dbbca,aadbbcbcac

输出样例

true

我的代码

private static String solution(String line) {
    // 在此处理单行数据
    String[] arr1 = line.split(",");
    int len1 = arr1[0].length();
    int len2 = arr1[1].length();
    int len3 = arr1[2].length();

    if (len3 != len1 + len2)
        return false + "";
    if (len1 == 0)
        return (arr1[1] == arr1[2]) + "";
    if (len2 == 0)
        return (arr1[0] == arr1[2]) + "";

    int[][] dp = new int[len1 + 1][len2 + 1];
    dp[0][0] = 1;
    // init the dp array
    for (int i = 1; i <= len1; i++) {
        if (arr1[0].charAt(i-1) == arr1[2].charAt(i-1))
            dp[i][0] = dp[i - 1][0];
    }
    for (int i = 1; i <= len2; i++) {
        if (arr1[1].charAt(i-1) == arr1[2].charAt(i-1))
            dp[0][i] = dp[0][i - 1];
    }
    // dp
    for (int i = 1; i < len1 + 1; i++) {
        for (int j = 1; j < len2 + 1; j++) {
            int t = i + j;
            if (arr1[0].charAt(i-1) == arr1[2].charAt(t-1)) {
                dp[i][j] = dp[i - 1][j] | dp[i][j];
            }
            if (arr1[1].charAt(j-1) == arr1[2].charAt(t-1)) {
                dp[i][j] = dp[i][j - 1] | dp[i][j];
            }
        }
    }
    // 返回处理后的结果
    if (dp[len1][len2] == 1)
        return true + "";
    return false + "";
}

参考/借鉴(咳咳)

Monster丶Xu 的 交叉字符串问题、判断字符串s3是不是由字符串s1和s2交叉组合而成

猜你喜欢

转载自blog.csdn.net/m0_37750720/article/details/82532274