zoukankan      html  css  js  c++  java
  • 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 public class Solution {
     2     public boolean isInterleave(String s1, String s2, String s3) {
     3         // Start typing your Java solution below
     4         // DO NOT write main() function
     5         if(s3.length() != s1.length() + s2.length()) return false;
     6         return check(s1, 0, s2, 0, s3, 0);
     7     }
     8     public boolean check(String s1, int p1, String s2, int p2, String s3, int p3){
     9         if(p3 == s3.length()) return true;
    10         if(p1 < s1.length() && s3.charAt(p3) == s1.charAt(p1)){ 
    11             if(p2 < s2.length() && s3.charAt(p3) == s2.charAt(p2))
    12                 return check(s1, p1, s2, p2 + 1, s3, p3 + 1) || check(s1, p1 + 1, s2, p2, s3, p3 + 1);
    13             else
    14                 return check(s1, p1 + 1, s2, p2, s3, p3 + 1);
    15         }else if(p2 < s2.length() && s3.charAt(p3) == s2.charAt(p2))
    16             return check(s1, p1, s2, p2 + 1, s3, p3 + 1);
    17         else return false;
    18     }
    19 }

    第二遍: 采用二维DP来做。对于每个数 有一个关系:

    isInterleaving(s1,len1,s2,len2,s3,len3)=(s3.lastChar == s1.lastChar)&& isInterleaving(s1,len1 -1,s2,len2,s3,len3 -1)||(s3.lastChar == s2.lastChar)&& isInterleaving(s1,len1,s2,len2 -1,s3,len3 -1)

     1 public class Solution {
     2     boolean[][] map = null;
     3     public boolean isInterleave(String s1, String s2, String s3) {
     4         // Start typing your Java solution below
     5         // DO NOT write main() function
     6         // char l3 = s3.length();
     7         int l2 = s2.length();
     8         int l1 = s1.length();
     9         if(s3.length() != l2 + l1) return false;
    10         map = new boolean[l1 + 1][l2 + 1];
    11         map[0][0] = true;
    12         for(int i = 0; i < l1; i ++){
    13             if(s1.charAt(i) == s3.charAt(i)) map[i + 1][0] = true;
    14             else break;
    15         }
    16         for(int j = 0; j < l2; j ++){
    17             if(s2.charAt(j) == s3.charAt(j)) map[0][j + 1] = true;
    18             else break;
    19         }
    20         for(int i = 0; i < l1; i ++)
    21             for(int j = 0; j < l2; j ++){
    22                 char c1 = s1.charAt(i);
    23                 char c2 = s2.charAt(j);
    24                 char c3 = s3.charAt(i + j + 1);
    25                 if(c1 == c3) map[i + 1][j + 1] = map[i][j + 1] || map[i + 1][j + 1];
    26                 if(c2 == c3) map[i + 1][j + 1] = map[i + 1][j] || map[i + 1][j + 1];
    27         }
    28         return map[l1][l2];
    29     }
    30 }

     第三遍:

     1 public class Solution {
     2     public boolean isInterleave(String s1, String s2, String s3) {
     3         int l1 = s1.length(), l2 = s2.length(), l3 = s3.length();
     4         if(s1.length() + s2.length() != s3.length()) return false;
     5         boolean[][] arr = new boolean[l1 + 1][l2 + 1];
     6         arr[0][0] = true;
     7         for(int i = 0; i < l1 && arr[i][0]; i ++){
     8             if(s1.charAt(i) == s3.charAt(i)) arr[i + 1][0] = true; 
     9         }
    10         for(int i = 0; i < l2 && arr[0][i]; i ++){
    11             if(s2.charAt(i) == s3.charAt(i)) arr[0][i + 1] = true; 
    12         }
    13         for(int i = 1; i <= l1; i ++){
    14             for(int j = 1; j <= l2; j ++){
    15                 if(arr[i][j - 1] && s2.charAt(j - 1) == s3.charAt(i + j - 1)) arr[i][j] =  true;
    16                 else if(arr[i - 1][j] && s1.charAt(i - 1) == s3.charAt(i + j - 1)) arr[i][j] = true;
    17                 else arr[i][j] = false;
    18             }
    19         }
    20         return arr[l1][l2];
    21     } 
    22 }
  • 相关阅读:
    001-读书笔记-企业IT架构转型之道-阿里巴巴中台战略思想与架构实战-第一章 阿里巴巴集团中台战略引发的思考
    java-mybaits-011-mybatis-Interceptor-拦截器原理、统一赋值、计算耗时
    007-Redi-命令-脚本命令、链接命令、服务器命令、事务、HyperLogLog
    006-Redis 发布订阅
    005-redis-命令-4、无序集合,5、有序集合
    004-redis-命令-2、哈希操作命令,3、列表操作命令
    Ubuntu Server 14.04 --secure-file-priv error in MySql 解决方案
    Mysql Sql语句令某字段值等于原值加上一个字符串
    hdu 1281 二分图最大匹配
    hdu1045 DFS
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3338011.html
Copyright © 2011-2022 走看看