https://leetcode.com/problems/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.
那么转换公式就是:
if(s1.charAt(i-1) == s3.charAt(i+j-1) && match[i-1][j]) match[i][j] = true;
if(s2.charAt(j-1) == s3.charAt(i+j-1) && match[i][j-1]) match[i][j] = true;
其余情况就为false
代码如下:
public class Solution {
public boolean isInterleave(String s1, String s2, String s3) {
if(s1==null && s2==null && s3==null) return true;
if(s1.length()==0) return s3.equals(s2);
if(s2.length()==0) return s3.equals(s1);
if(s3.length() != (s1.length() + s2.length())) return false;
boolean[][] match = new boolean[s1.length()+1][s2.length()+1];
match[0][0] = true;
for(int i=0; i<=s1.length(); i++){
for(int j=0; j<=s2.length(); j++){
if(i>0){
if(s1.charAt(i-1) == s3.charAt(i+j-1) && match[i-1][j]) match[i][j] = true;
}
if(j>0){
if(s2.charAt(j-1) == s3.charAt(i+j-1) && match[i][j-1]) match[i][j] = true;
}
}
}
return match[s1.length()][s2.length()];
}
}
如果s1的长度为m,s2长度为n,时间复杂度和空间复杂度都是O(m*n)
本文介绍了一个经典的字符串匹配问题——判断字符串s3是否由s1和s2交错组成,并提供了一种使用动态规划解决该问题的方法。通过分析字符串的匹配规律,给出了一段易于理解的Java代码实现。
276

被折叠的 条评论
为什么被折叠?



