zoukankan      html  css  js  c++  java
  • [leetcode]Interleaving String

    Interleaving String

    Given s1s2s3, find whether s3 is formed by the interleaving of s1 and s2.

    For example,
    Given:
    s1 = "aabcc",
    s2 = "dbbca",

    When s3 = "aadbbcbcac", return true.
    When s3 = "aadbbbaccc", return false.

    算法思路:

    思路1:递归。很典型的递归。但是不用试,肯定超时;

    思路2:DP。dp[i][j]表示s1[0~i]&s2[0~j]组成的串串,是否能组成s3[0,i+j]。

    初始状态:

    dp[0][i] 和 dp[i][0],即单个字符串尽最大努力能匹配到什么程度。

    余下的状态转移方程:

    dp[i][j] = dp[i - 1][j] | dp[i][j - 1]     s1.charAt(i - 1) == s3.charAt(i + j - 1) == s2.charAt(j - 1) (第一次做木有考虑到这种情况)
    dp[i][j] = dp[i - 1][j]             s1.charAt(i - 1) == s3.charAt(i + j - 1);
    dp[i][j] = dp[i][j - 1]             s2.charAt(j - 1) == s3.charAt(i + j - 1);

    代码如下:

     1 public class Solution {
     2     public boolean isInterleave(String s1, String s2, String s3) {
     3         if(s1.length() == 0) return s2.equals(s3);
     4         if(s2.length() == 0) return s1.equals(s3);
     5         if(s1.length() + s2.length() != s3.length()) return false;
     6         int height = s1.length();
     7         int width = s2.length();
     8         boolean[][] dp = new boolean[height + 1][width + 1];
     9         dp[0][0] = true;
    10         for(int i = 1; i <= height; i++)
    11             if(s1.substring(0,i).equals(s3.substring(0,i))) dp[i][0] = true;
    12         for(int i = 1; i <= width; i++)
    13             if(s2.substring(0,i).equals(s3.substring(0,i))) dp[0][i] = true;
    14         for(int i = 1; i <= height; i++){
    15             for(int j = 1; j <= width; j++){
    16                 char c1 = s1.charAt(i - 1), c2 = s2.charAt(j - 1), c3 = s3.charAt(i + j - 1);
    17                 if(c1 == c3 && c2 == c3){
    18                     dp[i][j] = dp[i - 1][j] | dp[i][j - 1];
    19                 }else if(c1 == c3 ){
    20                     dp[i][j] = dp[i - 1][j];
    21                 }else if(c2 == c3){
    22                     dp[i][j] = dp[i][j - 1];
    23                 }
    24             }
    25         }
    26         return dp[height][width];
    27     }
    28 }

    代码好粗啊。。。。

  • 相关阅读:
    14.6.1 Creating InnoDB Tables 创建InnoDB 表:
    mysql iot 主键自增列问题
    mysql iot 主键自增列问题
    perl 定义post接口
    perl 定义post接口
    [置顶] 一步步构建大型网站架构
    [置顶] 一步步构建大型网站架构
    技术人员如何面试
    技术人员如何面试
    技术人员如何面试
  • 原文地址:https://www.cnblogs.com/huntfor/p/3915696.html
Copyright © 2011-2022 走看看