[LeetCode] - Interleaving String

11 篇文章 0 订阅

Given s1s2s3, 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题目,递推式写在代码里面了。有了递推式,建起table,然后bottom-up顺着把table填满就行了。string的题目在建table的时候,一般都把table的size弄成string的长度加1,这样处理最开始的元素的时候方便一些,但是要注意给table中相应的位置赋上合适的初始值。

代码如下:

// inter[i][j] -> s3.substring(i+j) is interleaving string or not
// inter[i][j] = (inter[i-1][j]&&s1(i)==s3(i+j)) || (inter[i][j-1]&&s2(j)==s3(i+j))

public class Solution {
    public boolean isInterleave(String s1, String s2, String s3) {
        if(s1==null && s2==null) return s3==null;
        if(s1==null && s2!=null) return s2.equals(s3);
        if(s1!=null && s2==null) return s1.equals(s3);
        if(s1!=null && s2!=null && s3==null) return false;
        if(s1.length()+s2.length()!=s3.length()) return false;
        if(s1.length()==0) return s2.equals(s3);
        if(s2.length()==0) return s1.equals(s3);
        
        boolean[][] inter = new boolean[s1.length()+1][s2.length()+1];
        inter[0][0] = true;
        for(int i=1; i<=s2.length(); i++) {
            inter[0][i] = (s2.substring(0, i).equals(s3.substring(0, i)));
        }
        for(int j=1; j<=s1.length(); j++) {
            inter[j][0] = (s1.substring(0, j).equals(s3.substring(0, j)));
        }
        for(int i=1; i<=s1.length(); i++) {
            for(int j=1; j<=s2.length(); j++) {
                boolean temp1 = (inter[i-1][j] && s1.charAt(i-1)==s3.charAt(i+j-1));
                boolean temp2 = (inter[i][j-1] && s2.charAt(j-1)==s3.charAt(i+j-1));
                inter[i][j] = temp1 || temp2;
            }
        }
        return inter[s1.length()][s2.length()];
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值