题目描述:
思路:一开始的想法是三个指针来验证(没错题解里面说的上来就用指针的就是我),但是这种做法当s1,s2都等于s3时涉及到先判断哪一个,这会影响到最后结果的判断。于是默默的按照题解的动态规划。
class Solution {
public boolean isInterleave(String s1, String s2, String s3) {
int m=s1.length();
int n=s2.length();
int o=s3.length();
if(m+n!=o)return false;
boolean [][] result=new boolean[m+1][n+1];
result[0][0]=true;
for(int i=0;i<=m;i++){
for(int j=0;j<=n;j++){
if(i>0)result[i][j]=result[i][j] ||(result[i-1][j]&&(s1.charAt(i-1)==s3.charAt(i+j-1)));
if(j>0)result[i][j]=result[i][j] ||(result[i][j-1]&&(s2.charAt(j-1)==s3.charAt(i+j-1)));
}
}
return result[m][n];
}
}
此外还可以用滚动数组来优化空间复杂度