392. Is Subsequence
// Two Pointers
bool isSubsequence(string s, string t) { // time: O(s_len); space: O(1)
int s_idx = 0;
for (int t_idx = 0; t_idx < t.length() && s_idx < s.length(); ++t_idx) {
if (s[s_idx] == t[t_idx]) ++s_idx;
}
return s_idx == s.length();
}// Follow-Up: Pre-Processing + Binary Search
bool isSubsequence(string s, string t) {
vector<vector<int> > idx(26);
for (int i = 0; i < t.length(); ++i) idx[t[i] - 'a'].push_back(i);
int prev = -1;
for (char c : s) {
vector<int> vec = idx[c - 'a'];
if (vec.empty()) return false;
int pos = upper_bound(vec.begin(), vec.end(), prev) - vec.begin();
if (pos == vec.size()) return false;
prev = vec[pos];
}
return true;
}Previous387. First Unique Character in a StringNext395. Longest Substring with At Least K Repeating Characters
Last updated