美文网首页
判断子序列

判断子序列

作者: WAI_f | 来源:发表于2020-05-21 22:59 被阅读0次

题目:

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。

示例:

s = "abc", t = "ahbgdc"
返回 true.

解题方法:

我的解题思路还是挺清楚的,就是依次判断s中字符是否在t中出现,查询过程中,不断更新在t中查询的起始索引,这样就可以保证不会每次遍历都从t的起始位置进行匹配,同时也减少了遍历的时间。但是代码写的非常难看,逻辑也比较乱,导致改了很多次才通过。

代码和结果:

class Solution {
public:
    bool isSubsequence(string s, string t) {
        int start=0;
        if(s.empty())
            return true;
        if(t.empty())
            return false;
        int i;
        for(i=0;i<s.size();i++)
        {
            while(start<t.size())
            {
                if(s[i]==t[start])
                {
                    start++;
                    break;
                }
                else
                {
                    start++;
                }
            } 
            if(start==t.size())
            {
                i++;
                break;
            } 
        }

        if(start<t.size())
            return true;
        else if(i<s.size())
            return false;
        else if(s[i-1]!=t[start-1])
            return false;
        else    
            return true;
    }
};
运行结果:

写这篇文章的时候突然想起来是不是可以用一个循环来完成这个程序,且编写起来应该要简单很多:

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

题目还是很简单的,思路也很清晰,不过写代码的时候还是要多想想,不然还是很容易出现逻辑漏洞,改起来挺烦的。

原题链接:https://leetcode-cn.com/problems/is-subsequence/

相关文章

  • 判断子序列

    给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t...

  • 判断子序列

    题目: 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字...

  • [LeetCode] 392. Is Subsequence (

    原题 判断子序列

  • 392. 判断子序列

    392. 判断子序列

  • 02-13:leetcode重刷7之动态规划

    动态规划 动态规划的重点是:状态转移方程 1、判断子序列 leetcode392. 判断子序列[https://l...

  • 动态规划 - 判断子序列

    题目 leetcode, 392. 判断子序列给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为...

  • LeetCode-392-判断子序列

    判断子序列 题目描述:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除...

  • 子序列问题

    判断序列S是否是序列T的子序列 解析:典型的双指针问题 Code

  • Day72 判断子序列

    '''Day72 判断子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 你可以认为 s 和 t ...

  • 贪心--判断子序列

    目录[https://www.jianshu.com/p/85e18c21317a] 题号[https://lee...

网友评论

      本文标题:判断子序列

      本文链接:https://www.haomeiwen.com/subject/ejmxahtx.html