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 }

    代码好粗啊。。。。

  • 相关阅读:
    Generate Parentheses
    Length of Last Word
    Maximum Subarray
    Count and Say
    二分搜索算法
    Search Insert Position
    Implement strStr()
    Remove Element
    Remove Duplicates from Sorted Array
    Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/huntfor/p/3915696.html
Copyright © 2011-2022 走看看