1 条题解
-
0
【例70.2】 求A-B字符串
解题思路
用256项布尔表标记B中出现过的字符,再遍历A,只保留未标记字符,顺序不变。
正确性说明
依题目给出的对应关系逐项处理,位置与原输入保持明确对应。每一步完成当前项的全部贡献,结束后得到所有位置或字符的目标结果。
易错点
B出现某字符一次也会删A中该字符全部出现;空格也能被删除。
复杂度
时间O(|A|+|B|),空间O(|A|+|B|)。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); string a, b; getline(cin, a); getline(cin, b); bool removed[256] = {}; for (unsigned char c : b) removed[c] = true; for (unsigned char c : a) if (!removed[c]) cout << c; cout << "\n"; return 0; }
- 1