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;
}
个人思路:首先,将不能相邻的字母对存储在一个数据结构中,
然后,遍历给定的字符串,检查当前字符和上一个字符是否形成了一个不能相邻的字母对。如果是,就记录下需要删除的字符的数量。
最终的答案就是记录下来的删除字符数量。