給定字符串 s 和 t ,判斷 s 是否為 t 的子序列。
字符串的一個子序列是原始字符串刪除一些(也可以不刪除)字符而不改變剩余字符相對位置形成的新字符串。(例如,"ace"是"abcde"的一個子序列,而"aec"不是)。
進階:
如果有大量輸入的 S,稱作 S1, S2, … , Sk 其中 k >= 10億,你需要依次檢查它們是否為 T 的子序列。在這種情況下,你會怎樣改變代碼?
致謝:
特別感謝 @pbrother 添加此問題并且創建所有測試用例。
示例 1:
輸入:s = “abc”, t = “ahbgdc”
輸出:true
示例 2:
輸入:s = “axc”, t = “ahbgdc”
輸出:false
提示:
0 <= s.length <= 100
0 <= t.length <= 10^4
兩個字符串都只由小寫字符組成。
雙序列雙指針,跳過t中有,s中沒有的字符,最后看s是否遍歷完:
class Solution {
public:bool isSubsequence(string s, string t) {int sIdx = 0;int tIdx = 0;while (sIdx < s.size() && tIdx < t.size()) {if (s[sIdx] == t[tIdx]) {++sIdx;}++tIdx;}return sIdx == s.size();}
};
t的長度為n,則此算法時間復雜度為O(n),空間復雜度為O(1)。