我的PAT-ADVANCED代码仓:https://github.com/617076674/PAT-ADVANCED
原题链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805429018673152
题目描述:
题目翻译:
1050 字符串相减
给出两个字符串S1和S2,S = S1 - S2倍定义成除去S2中所有字符的S1的剩余字符串。你的任务是对任意给定的两个字符串,计算出S1 - S2的值。但是,快速完成它可能并不那么简单。
输入格式:
每个输入文件包含一个测试用例。每个测试用例有两行,分别表示S1和S2。每个字符串的长度不超过10 ^ 4。题目保证所有字符都是可见的ASCII码和空格,并且新的行字符表示字符串的结尾。
输出格式:
对每个测试用例,在一行中输出S1 - S2的结果。
输入样例:
They are students.
aeiou
输出样例:
Thy r stdnts.
知识点:字符串、哈希表
思路:用一个大小为256的数组记录字符串S2中出现过的字符
遍历S1中字符时,如果该字符在S2中出现过,则不输出。
时间复杂度是O(len1 + len2),其中len1是字符串S1的长度,len2是字符串S2的长度。空间复杂度是O(256)。
C++代码:
#include<iostream>
#include<string>
using namespace std;
int main(){
bool flag[256];
fill(flag, flag + 256, true);
string input1;
string input2;
getline(cin, input1);
getline(cin, input2);
for(int i = 0; i < input2.length(); i++){
flag[input2[i]] = false;
}
for(int i = 0; i < input1.length(); i++){
if(flag[input1[i]]){
printf("%c", input1[i]);
}
}
return 0;
}
C++解题报告: