acwing -- 3358. 放养但没有完全放养

 利用计数的思想,把每个字母分配到26个桶中,下标从小到大排序,利用upper_bound即可判断

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;

int main() {
    string s1, s2;
    cin >> s1 >> s2;
    
    vector<vector<int>> cnt(26, vector<int>());
    
    for(int i = 0; i < s1.size(); i ++ ) {
        cnt[s1[i] - 'a'].push_back(i);
    }
    
    int res = 1;
    int last = -1;
    for(auto c : s2) {
        auto it = upper_bound(cnt[c - 'a'].begin(), cnt[c - 'a'].end(), last);
        if(it != cnt[c - 'a'].end()) {
            last = *it;
        } else {
            res ++ ;
            last = -1;
            it = upper_bound(cnt[c - 'a'].begin(), cnt[c - 'a'].end(), last);
            if(it != cnt[c - 'a'].end()) {
                last = *it;
            }
        }
    }
    
    cout << res << endl;
    
    return 0;
}

 

posted @ 2023-07-11 11:18  深渊之巅  阅读(3)  评论(0编辑  收藏  举报