題目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有一個索引idx最開始指向0,只需要順序遍歷字符串t,在t中找到字符和s[idx]相同,idx+1,最后如果idx走到了s字符串的最后,證明s是t的子序列。
代碼
class Solution {
public:
bool isSubsequence(string s, string t) {
if (s.empty()) return true;
int idx = 0, s_size = s.size();
for (int i = 0, t_size = t.size(); i < t_size; ++i) {
if (idx == s_size) {
break;
}
if (t[i] == s[idx]) {
idx++;
}
}
return idx == s_size;
}
};