leetcode -- 392 判断子序列

题目描述:

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。

你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace""abcde"的一个子序列,而"aec"不是)。

示例 1:
s = "abc", t = "ahbgdc"

返回 true.

示例 2:
s = "axc", t = "ahbgdc"

返回 false.

后续挑战 :

如果有大量输入的 S,称作S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?

菜死我了QAQ,上代码

class Solution {
public:
    bool isSubsequence(string s, string t) {
        if(s.length() == 1 && t.length() == 1 && s[0] != t[0])
        {
            return false;
        }
        if(s.length() == 0)
        return true;
        int a = 0;
        for(int i = 0 ; i < s.length() ;  i++)
        {
            
            if( a == 0 && i!=0)
            {
                return false;
            }
            if( a == t.length())
            {
                return false;
            }
            for(int j = a ; j < t.length() ; j ++)
            {
                if(s[i] == t[j])
                {
                    a = j+1;
                    break;
                }
                
                else{
                    if(j == t.length()-1)
                    {
                        a = 0;
                    }
                    continue;
                }

            
            }
            
         }
         if( a == 0 )
            {
                return false;
            }
         return true; 
    }
};

以上是我写的代码,看了看官方题解.... orz

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

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/is-subsequence/solution/pan-duan-zi-xu-lie-by-leetcode-solution/

猜你喜欢

转载自www.cnblogs.com/wtzmz/p/13387400.html