LeetCode【#392】Is Subsequence

题目链接:

点击跳转


题目分析:

给我们s,t俩个字符串,问是否可以通过删除t的一些字符得到s,其实换个方法就是说,s是否是t的子串,也就是说s是否是t的一个子集。

 

解题思路:

思路一:采用暴力法求解,求出t的所有子集,求子集的过程中,与s进行比较,如果碰到有相等的,那么就返回true,如果子集都枚举完了,还没有找到与s相等的字串,就说明s不是t的字串返回false.但是用这种方法,子集枚举的复杂度为O(2^n),复杂度过大。

思路二:我们可以用俩个指针i,j分别指向字符串s,t。

算法描述如下:j指针一直往后走,碰到s[i]==t[j]的时候,说明匹配上了一个,将i++,j++,否则 j++。当s 或者t 都走完的时候,这个时候,我们判断一下i指针是否走完了s字符串,如果走完了,说明也匹配上了,如果没有走完,那么就是没有匹配上。这个复杂度是O(t 的长度)。

 

AC代码如下:

class Solution {
public:
    bool isSubsequence(string s, string t) {
        
        int lenS = s.length();
        int lenT = t.length();
        int i = 0;
        int j = 0;
        
        while(i<lenS && j<lenT)
        {
            if(s[i]==t[j]){
                i++;
                j++;
            }
            else
                j++;
        }
        if(i==lenS)
            return true;
        else
            return false;
        
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值