leetcode-97. Interleaving String
题目:
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.
For example,
Given:
s1 = “aabcc”,
s2 = “dbbca”,When s3 = “aadbbcbcac”, return true.
When s3 = “aadbbbaccc”, return false.
这种题看起来比较难懂,时间上做多了还是套路的题,这样的字符串匹配或者的组合之类的题目,或者说对于有多中情况得到解的情况实际上都应该优先考虑DP算法。
我在做这题的时候使用了一个int[][]来保存当前位置匹配的最长字符串,然后如果最右下角的位置匹配的是S3的长度则说明当前完成匹配。看答案似乎大部分人用的是boolean[][]我一开始觉得这种方法不一定能行。实际上还是自己思考深度不够。不过不管用什么思路都是类似的
public class Solution {
public boolean isInterleave(String s1, String s2, String s3) {
if(s1.length()+s2.length()!=s3.length()) return false;
int[][] mat = new int[s1.length()+1][s2.length()+1];
for(int i = 0 ; i <= s1.length();i++)
for(int j = 0 ; j <= s2.length();j++){
if(i>0 && s3.charAt(mat[i-1][j])==s1.charAt(i-1))
mat[i][j] = mat[i-1][j]+1;
if(j>0 && s3.charAt(mat[i][j-1])==s2.charAt(j-1))
mat[i][j] = Math.max(mat[i][j],mat[i][j-1]+1);
}
return mat[s1.length()][s2.length()]==s3.length();
}
}