leetcode 97 交错字符串

1-----这里不要认为交错字符串有什么特别的顺序要求,如果我们一个字符一个字符的处理,那么就不用管是不是交错字符串了啊

    public boolean isInterleave(String s1, String s2, String s3) {
        if(s1.length()+s2.length()!=s3.length())
            return false;
        return isInterleave_index(s1,s2,s3,0,0,0);
    }
    public boolean isInterleave_index(String s1,String s2,String s3,int x,int y,int z){
        System.out.println(s1.substring(x)+" "+s2.substring(y)+" "+s3.substring(z));
        if(z>=s3.length())
            return true;
        if(x<s1.length()&&s1.charAt(x)==s3.charAt(z)&&isInterleave_index(s1,s2,s3,x+1,y,z+1))
            return true;
        if(y<s2.length()&&s2.charAt(y)==s3.charAt(z)&&isInterleave_index(s1,s2,s3,x,y+1,z+1))
            return true;
        return false;
    }

2----DP解决---这里真的很巧妙-----官网的题解中的动画也很好

dp[i][j]表示s1的前i个字符和s2的前j个字符是否能构成s3的前i+j个字符。。。。感觉再做点DP可以总结一点DP的思路

其实我们很容易想到常用算法DP,也知道用一个二维数组,但是经常不知道这个二维数组里面每个元素表示什么!但感觉做多了会有规律可循;而当我们假定里面的每个元素表示什么的时候,我们需要给出动态规划的状态转移,才能佐证我们的假定是正确的hhh

3----DP----常常N*M都可以用滚动数组解决,降低一点空间复杂度。。但是一般还是喜欢用N*M二维数组来理解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值