返回题解分享
讨论 / 题解分享/ 帖子详情

子串简写(编程题) - 题解

#include <bits/stdc++.h>

using namespace std;

int k;
long long ans;
string s;
char front, back;
vector<int> f, b;

int binary_search(int l, int r, int t) {
    while (l < r) {
        int mid = (l + r) >> 1;
        if (b[mid] > t) {
            r = mid;
        } else if (b[mid] < t) {
            l = mid + 1; 
        } else if (b[mid] == t) return mid;
    }
    return l;
}

int main(void) {
    cin >> k >> s >> front >> back;
    for (int i = 0; i < s.size(); i ++) {
        if (s[i] == front) f.push_back(i);
        else if (s[i] == back) b.push_back(i);
    }
    
    auto bs = b.size();

    for (int i = 0; i < f.size(); i ++) {
        int idx = binary_search(0, b.size(), f[i] + k - 1);
        if (idx < b.size()) ans += bs - idx;
    }

    cout << ans;
    return 0;
}
0 回复 0 转发 0 喜欢 1 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!