为什么只有40分?
查看原帖
为什么只有40分?
713060
wanweijie楼主2023/8/20 20:12

RT,为什么只有40分

评测效果传送门

代码见下

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
    ll N;
    string sentence;
    ll M;

    cin >> N >> sentence >> M;

    unordered_set<string> cannotAdjacent;

    for (ll i = 0; i < M; ++i) {
        string pair;
        cin >> pair;
        cannotAdjacent.insert(pair);
        // 为了处理重复的字母对,将 "ab" 和 "ba" 都添加到不能相邻集合中
        cannotAdjacent.insert(pair.substr(1, 1) + pair.substr(0, 1));
    }

    ll deletedCount = 0;
    char prevChar = '\0';

    for (char c : sentence) {
        if (prevChar != '\0' && cannotAdjacent.count(string(1, prevChar) + c)) {
            deletedCount++;
            prevChar = '\0'; // 删除上一个字符,继续判断下一个字符
        } else {
            prevChar = c;
        }
    }

    std::cout << deletedCount << endl;

    return 0;
}

个人思路:首先,将不能相邻的字母对存储在一个数据结构中,

然后,遍历给定的字符串,检查当前字符和上一个字符是否形成了一个不能相邻的字母对。如果是,就记录下需要删除的字符的数量。

最终的答案就是记录下来的删除字符数量。

2023/8/20 20:12
加载中...