97. Interleaving String

Posted skillking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了97. Interleaving String相关的知识,希望对你有一定的参考价值。

一、题目

  1、审题

技术分享图片

  2、分析

    给出三个字符串,判断 s3 是否可以由 s1 与 s2中的字符交错形成。

 

二、解答

  1、思路:

    采用一个动态布尔型二维数组 matrix 记录匹配情况。matrix[0][0] 初值为 true。

    ①、先初始化 matrix 第一行、第一列。  

    ②、matrix[i][j] = true : 代表 s2 的前 i 个字符 + s1 的前 j 个字符成功匹配了 s3 的前 i+j 个字符。(注意字符串下标从 0 开始)

    

public boolean isInterleave3(String s1, String s2, String s3) {
        
        int n1 = s1.length();
        int n2 = s2.length();
        if(n1 + n2 != s3.length())
            return false;
        boolean[][] matrix = new boolean[n2+1][n1+1];
        
        matrix[0][0] = true;

        // matrix[i][0] : 代表 s2的第  i 个字符是否与 s3 的第 i 个字符对应。
        for (int i = 1; i <= n2; i++)     // 第一列 ,判断 s2 与 s3 是否一一对应
            matrix[i][0] = matrix[i-1][0] && (s2.charAt(i-1) == s3.charAt(i-1));
        
        // matrix[0][i] : 代表 s1 的第 i 个字符是否与 s3 的第 i 个字符对应。
        for(int i = 1; i <= n1; i++)    // 第一行,判断 s1 与  s3 是否一一对应
            matrix[0][i] = matrix[0][i-1] && (s1.charAt(i-1) == s3.charAt(i-1));
        
        // matrix[i][j] = true : 代表 s2 的前 i 个字符 + s1 的前 j 个字符成功匹配了 s3 的前 i+j 个字符。
        for (int i = 1; i <= n2; i++) {    
            for (int j = 1; j <= n1; j++) {
                matrix[i][j] = (matrix[i-1][j] && (s2.charAt(i-1) == s3.charAt(i+j-1)))
                        || (matrix[i][j-1] && (s1.charAt(j-1) == s3.charAt(i+j-1)));
            }
        }
        
        return matrix[n2][n1];
    }

 

    

    

 

以上是关于97. Interleaving String的主要内容,如果未能解决你的问题,请参考以下文章

97. Interleaving String

97. Interleaving String

97. Interleaving String

[leetcode-97-Interleaving String]

97. Interleaving String

[Leetcode] 97. Interleaving String