Leetcode 之 Interleaving String

原题:

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,用一个record来记录,首先需要判断一下s1和s2的长度的和与s3的长度是否一致,如果不一致直接返回false

如果一致,则首先判断s1的第index1个或s2的第index2个,是否和s3的index3个元素一样,要和两个字符串都比较,

之后的递归处理处理就行,需要注意的是,这两种情况只要有一个是true,那结果就是true,所以用或运算。

这里还有一个情况,就是dp的时候,s1或s2的index会超过其字符串的长度,为了解决这个问题,我把record的两个维度都增加了一个,当s1的index越界后,不会再增加,因此index1最大值就是s1.length()。当s1,s2,s3都越界后,代表已经匹配完了,而且这几个字符串也没有多出字符,返回true


代码如下(8ms):

class Solution {
public:
    bool isInterleave(string s1, string s2, string s3) {
        if( (s1.length()+s2.length()) != s3.length()) return false;
        vector<int>temp(s2.length()+1,-1);
        vector<vector<int>>record(s1.length()+1,temp);
        
        return inter(s1,s2,s3,0,0,0,record);
        
    }
    bool inter(string &s1, string &s2, string &s3,int index1,int index2,int index3,vector<vector<int>>&record){
        
        if(record[index1][index2] != -1) return record[index1][index2];
        
        if(index3>=s3.length()&&index1>=s1.length()&&index2>=s2.length()){
            record[index1][index2] = true;
            return true;
        }
    
        bool result = false;
        
        //一定要判断index1和length的比较,否则在取字符时会有错误
         if(index1<s1.length()&&s1[index1]==s3[index3]) {
             result |= inter(s1,s2,s3,index1+1,index2,index3+1,record);
         }
         if(index2<s2.length()&&s2[index2]==s3[index3]) {
             result |= inter(s1,s2,s3,index1,index2+1,index3+1,record);
         }
         
         record[index1][index2] = result;
         return result;
        
    }
};

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值