This question is the same as the follow up question of Leetcode 392.
See the code below:
- class Solution {
- public:
- int numMatchingSubseq(string S, vector<string>& words) {
- int res = 0;
- vector<vector<int>> ids(26);
- for(int i=0; i<S.size(); ++i) ids[S[i]-'a'].push_back(i);
- for(auto &w : words) {
- if(w.size() > S.size()) continue;
- int id = -1, i = 0;
- for(; i<w.size(); ++i) {
- int t = w[i] - 'a';
- auto it = upper_bound(ids[t].begin(), ids[t].end(), id);
- if(it == ids[t].end()) break;
- id = *it;
- }
- if(i == w.size()) ++res;
- }
- return res;
- }
- };
No comments:
Post a Comment