码迷,mamicode.com
首页 > 其他好文 > 详细

97. Interleaving String

时间:2018-09-26 23:54:40      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:技术   for   动态   lse   二维数组   inf   boolean   div   解答   

一、题目

  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

标签:技术   for   动态   lse   二维数组   inf   boolean   div   解答   

原文地址:https://www.cnblogs.com/skillking/p/9710555.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!