Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0 Star 0 Fork 0

徐云天/leetcode

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
_97.java 2.79 KB
一键复制 编辑 原始数据 按行查看 历史
徐云天 提交于 2021-07-12 18:00 +08:00 . 增加97
public class _97 {
static class Solution1{
public boolean isInterleave(String s1, String s2, String s3) {
return s1.length() + s2.length() == s3.length() && dfs(new Boolean[s1.length()+1][s2.length()+1],0,0,0,s1.toCharArray(),s2.toCharArray(),s3.toCharArray());
}
public boolean dfs(Boolean[][] dp,int i,int j,int k,char[] s1,char[] s2,char[] s3){
if(i == s1.length && j == s2.length) return true;
if(dp[i][j] != null) return dp[i][j];
return dp[i][j] = ( i < s1.length && s1[i] == s3[k] && dfs(dp,i+1,j,k+1,s1,s2,s3))
||(j < s2.length && s2[j] == s3[k] && dfs(dp,i,j+1,k+1,s1,s2,s3));
}
}
static class Solution2{
public boolean isInterleave(String s1, String s2, String s3) {
if(s1.length() + s2.length() != s3.length()) return false;
boolean[][] dp = new boolean[s1.length()+1][s2.length()+1];
char[] x1 = s1.toCharArray();
char[] x2 = s2.toCharArray();
char[] x3 = s3.toCharArray();
dp[0][0] = true;
for(int i = 0;i <= x1.length;i++){
for(int j = 0;j <= x2.length;j++){
if(i==0 && j==0) continue;
if(i == 0){
dp[i][j] = dp[i][j-1] && x2[j-1] == x3[i+j-1];
continue;
}
if(j == 0){
dp[i][j] = dp[i-1][j] && x1[i-1] == x3[i+j-1];
continue;
}
dp[i][j] = (dp[i-1][j] && x1[i-1] == x3[i+j-1]) || (dp[i][j-1] && x2[j-1] == x3[i+j-1]);
}
}
return dp[x1.length][x2.length];
}
}
static class Solution3{
public boolean isInterleave(String s1, String s2, String s3) {
//官方给出的空间优化思路,由Solution2变化得到
if(s1.length() + s2.length() != s3.length()) return false;
boolean[] dp = new boolean[s2.length()+1];
char[] x1 = s1.toCharArray();
char[] x2 = s2.toCharArray();
char[] x3 = s3.toCharArray();
for(int i = 0;i <= x1.length;i++){
for(int j = 0;j <= x2.length;j++){
if(i==0 && j==0) dp[j] = true;
if(i == 0 &&j > 0){
dp[j] = dp[j-1] && x2[j-1] == x3[i+j-1];
continue;
}
if(j == 0 && i> 0){
dp[j] = dp[j] && x1[i-1] == x3[i+j-1];
continue;
}
if(i > 0 && j> 0) dp[j] = (dp[j] && x1[i-1] == x3[i+j-1]) || (dp[j-1] && x2[j-1] == x3[i+j-1]);
}
}
return dp[x2.length];
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/xuyuntian/leetcode.git
git@gitee.com:xuyuntian/leetcode.git
xuyuntian
leetcode
leetcode
master