您的位置:首页 > 编程语言 > Java开发

leetcode-97. Interleaving String

2016-12-26 10:04 537 查看

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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode java