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];
        }

        

        

  • 相关阅读:
    [Ceoi2011]Traffic
    [中山市选2011]杀人游戏
    牛客 表达式得到期望结果的组成种数
    牛客 数字字符串转换为字母组合的种数
    牛客 龙与地下城游戏
    UVA 1103 Ancient Messages
    牛客 字符串的交错组成
    牛客 最小编辑代价
    牛客 子数组异或和为0的最多划分
    牛客 最长公共子串问题
  • 原文地址:https://www.cnblogs.com/skillking/p/9710555.html
Copyright © 2011-2022 走看看