package com.interview.books.leetcodeoj; /** * Created_By: stefanie * Date: 14-12-26 * Time: 下午2:05 */ public class LOJ97_InterleavingString { //edge case: if(s1.length() + s2.length() != s3.length()) return false; //state: interleaving[i][j]: if s3.substring(0, i+j) is interleaving string of s1.substring(0, i) and s2.substring(0, j). //initialize: interleaving[i][0] == true when s3.charAt(i - 1) == s1.charAt(i - 1) // interleaving[0][j] == true when s3.charAt(j - 1) == s2.charAt(j - 1) //function: interleaving[i][j] == true when // s3.charAt(i + j - 1) == s1.charAt(i - 1) && interleaving[i-1][j] // s3.charAt(i + j - 1) == s2.charAt(j - 1) && interleaving[i][j-1] //result: interleaving[s1.length()][s2.length()] public boolean isInterleave(String s1, String s2, String s3) { if(s1.length() + s2.length() != s3.length()) return false; boolean[][] interleaving = new boolean[s1.length() + 1][s2.length() + 1]; interleaving[0][0] = true; for(int i = 1; i <= s1.length(); i++){ if(s1.charAt(i - 1) == s3.charAt(i - 1)) interleaving[i][0] = true; } for(int j = 1; j <= s2.length(); j++){ if(s2.charAt(j - 1) == s3.charAt(j - 1)) interleaving[0][j] = true; } for(int i = 1; i <= s1.length(); i++){ for(int j = 1; j <= s2.length(); j++){ if((s1.charAt(i - 1) == s3.charAt(i + j - 1) && interleaving[i - 1][j]) || (s2.charAt(j - 1) == s3.charAt(i + j - 1) && interleaving[i][j - 1])){ interleaving[i][j] = true; } } } return interleaving[s1.length()][s2.length()]; } }