1. 程式人生 > >LintCode 29---交叉字符串

LintCode 29---交叉字符串

|| class bsp lint avi col mat orm tco

public class Solution {
    /**
     * @param s1: A string
     * @param s2: A string
     * @param s3: A string
     * @return: Determine whether s3 is formed by interleaving of s1 and s2
     */
   public boolean isInterleave(String s1, String s2, String s3) {
        if(s1.length() + s2.length() != s3.length())
           
return false; boolean[][] matched= new boolean[s1.length()+1][s2.length()+1]; matched[0][0]= true; for(int i=1;i<= s1.length(); i++){ if(s3.charAt(i-1) == s1.charAt(i-1)) matched[i][0] = true; } for(int j= 1;j<= s2.length();j++){
if(s3.charAt(j-1) == s2.charAt(j-1)) matched[0][j] = true; } for(int i=1;i<=s1.length(); i++){ char c1 = s1.charAt(i-1); for(int j = 1;j<= s2.length();j++){ int i3 = i+ j; char c2 = s2.charAt(j- 1);
char c3 = s3.charAt(i3 -1); if(c1 == c3) matched[i][j] =matched[i][j] || matched[i-1][j]; if( c2== c3) matched[i][j] = matched[i][j] || matched[i][j-1]; } } return matched[s1.length()][s2.length()]; } }

LintCode 29---交叉字符串