zoukankan      html  css  js  c++  java
  • 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];
        }

        

        

  • 相关阅读:
    ASP.NET学习篇(4)——服务器端的控件【转自www.bitsCN.com】
    sql2005 管道的另一端上无任何进程解决方法
    SQL服务器名称的更改
    如何辨别移动硬盘的好坏
    ADO绑定SQL数据库过程
    SQL变量的使用
    SQL子查询
    什么SQL解发器?
    什么是存储过程呢?
    显式事务和隐式事务之间有什么区别?
  • 原文地址:https://www.cnblogs.com/skillking/p/9710555.html
Copyright © 2011-2022 走看看