给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。
示例 1:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac" 输出: true
示例 2:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc" 输出: false//dp[i][j] 代表是A的前i个字符与C中匹配(0~i-1),B中前j个字符与C中匹配(0~j-1).
class Solution {
public boolean isInterleave(String s1, String s2, String s3) {
//注意每部分用的长短不确定
int l1=s1.length();
int l2=s2.length();
int l3=s3.length();
if(l1+l2!=l3){
return false;
}
boolean[][] dp=new boolean[l1+1][l2+1];//第一个位置都为零
dp[0][0]=true;//dp[i][j] 代表是A的前i个字符与C中匹配(0~i-1),B中前j个字符与C中匹配(0~j-1).
//初始条件
for(int i=1;i<=l1;i++){
if((s1.charAt(i-1)==s3.charAt(i-1))&&dp[i-1][0]){
dp[i][0]=true;
}
}
for(int i=1;i<=l2;i++){
if((s2.charAt(i-1)==s3.charAt(i-1))&&dp[0][i-1]){
dp[0][i]=true;
}
}
for(int i=1;i<l1+1;i++){
for(int j=1;j<l2+1;j++){
if((s1.charAt(i-1)==s3.charAt(i+j-1))&&dp[i-1][j]){
dp[i][j]=true;
}
if((s2.charAt(j-1)==s3.charAt(i+j-1))&&dp[i][j-1]){
dp[i][j]=true;
}
}
}
return dp[l1][l2];
}
}