Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.
For example,
Given:
s1 =
s2 =
Given:
s1 =
"aabcc"
,s2 =
"dbbca"
,
When s3 =
When s3 =
"aadbbcbcac"
, return true.When s3 =
"aadbbbaccc"
, return false.
Solution:O(n)
public class Solution {
public boolean isInterleave(String s1, String s2, String s3) {
if(s3.length()!=s1.length()+s2.length())
return false;
boolean [][] match = new boolean [s1.length()+1][s2.length()+1];
match[0][0]=true;
int i=1;
while(i<=s1.length() && s1.charAt(i-1)==s3.charAt(i-1)){
match[i][0]=true;
i++;
}
i=1;
while(i<=s2.length() && s2.charAt(i-1)==s3.charAt(i-1)){
match[0][i]=true;
i++;
}
for(i=1;i<=s1.length();i++){
for(int j=1;j<=s2.length();j++){
char c = s3.charAt(i+j-1);
if(c==s1.charAt(i-1))
match[i][j]=match[i-1][j] || match[i][j];
if(c==s2.charAt(j-1))
match[i][j]=match[i][j-1] || match[i][j];
}
}
return match[s1.length()][s2.length()];
}
}
沒有留言:
張貼留言