1. 程式人生 > 實用技巧 >leetcode -- 392 判斷子序列

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/