zoukankan      html  css  js  c++  java
  • leetcode--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.

    rewrite the code

    public class Solution {
        /**
    	 * Standard dynamic programming methodology.
    	 * @param s1 -String 
    	 * @param s2 -String
    	 * @param s3 -String which is to be checked
    	 * @return true when s3 is formed by the interleaving of s1 and s2, false, otherwise.
    	 * @author Averill Zheng
    	 * @version 2014-06-27
    	 * @since JDK 1.7 
    	 */
    	public boolean isInterleave(String s1, String s2, String s3) {
    		if(s1.length() == 0)
    			return s2.equals(s3);
    		if(s2.length() == 0)
    			return s1.equals(s3);
    		if(s1.length() + s2.length() != s3.length())
    			return false;
    		
    		boolean[][] check = new boolean[s1.length() + 1][s2.length() + 1];
    		check[0][0] = true;
    		for(int i = 1; i < s1.length() + 1; ++i)
    			check[i][0] = check[i - 1][0] && (s1.charAt(i - 1) == s3.charAt(i - 1));
    		for(int i = 1; i < s2.length() + 1; ++i)
    			check[0][i] = check[0][i - 1] && (s2.charAt(i - 1) == s3.charAt(i - 1));
    		for(int i = 1; i < s1.length() + 1; ++i) {
    			for(int j = 1; j < s2.length() + 1; ++j) {
    				check[i][j] = (check[i][j - 1] && s2.charAt(j - 1) == s3.charAt(i + j - 1))
    							||(check[i - 1][j] && s1.charAt(i - 1) == s3.charAt(i + j - 1));
    			}
    		}
    		return check[s1.length()][s2.length()];  
        }
    }
    

      

    method: dynamical programming...

     1 public class Solution {
     2     public boolean isInterleave(String s1, String s2, String s3) {
     3         int len1 = s1.length(), len2= s2.length(), len3 = s3.length();
     4         if(len1 == 0 || len2 == 0)
     5             return s3.equals(s1) || s3.equals(s2);
     6         if(len3 != len1 + len2)
     7             return false;
     8         int[][] paths = new int[len1 + 1][len2 + 1];
     9         paths[0][0] = 1;
    10         for(int i = 1; i < len2 + 1; ++i)
    11             paths[0][i] = (s2.charAt(i - 1) == s3.charAt(i - 1)) ? 1 : 0;
    12         for(int i = 1; i < len1 + 1; ++i)
    13             paths[i][0] = (s1.charAt(i - 1) == s3.charAt(i - 1)) ? 1 : 0;
    14         for(int i = 1; i < len1 + 1; ++i){
    15             for(int j = 1; j < len2 + 1; ++j){
    16                 if(paths[i][j - 1] == 1 && s3.charAt(i + j - 1) == s2.charAt(j - 1))
    17                     paths[i][j] = 1;
    18                 else if(paths[i - 1][j] == 1 && s3.charAt(i + j - 1) == s1.charAt(i - 1))
    19                     paths[i][j] = 1;
    20                 else
    21                     paths[i][j] = 0;
    22             }            
    23         }         
    24         return (paths[len1][len2] == 1)? true : false;        
    25     }
    26 }
  • 相关阅读:
    一,安装python
    maven搭建ssm
    web优化
    java代码优化29个点
    供参考的 php 学习路线
    javascript-文档结构遍历
    jquery中的cookie使用
    jQuery中的Ajax
    lambda和抽象类
    上传jar包到nexus私服
  • 原文地址:https://www.cnblogs.com/averillzheng/p/3536933.html
Copyright © 2011-2022 走看看