Given two strings S1 and S2 , S=S1 −S2 is defined to be the remaining string after taking all the characters in S2 from S1 . Your task is simply to calculate S1 −S2 for any given strings. However, it might not be that simple to do it fast.
Input Specification:
Each input file contains one test case. Each case consists of two lines which gives S1 and S2 , respectively. The string lengths of both strings are no more than 104 . It is guaranteed that all the characters are visible ASCII codes and white space, and a new line character signals the end of a string.
Output Specification:
For each test case, print S1 −S2 in one line.
Sample Input:
They are students.
aeiou
Sample Output:
Thy r stdnts.
思路
这题很简单哈,而且我之前在Codeup上也已经做过了,不要被题目的【However, it might not be that simple to do it fast.】这句话所吓到哈。
题目大意就是给出两行字符串,让你输出第一行字符串删掉第二行字符串中所有字母之后的字符串(也就是所谓的S1-S2),那么很简单,直接用map对第二行字符串中所有字母置true,代表这是要滤去的。然后从头开始遍历第一行字符串,如果当前字母是false那么正常输出,如果是true就直接跳到下轮循环。
代码
#include<cstdio>
#include<stdlib.h>
#include<algorithm>
#include<map>
#include<string>
#include<string.h>
#include<iostream>
using namespace std;
map<char, bool> m;
int main()
{
string tmp1, tmp2;
getline(cin, tmp1);
getline(cin, tmp2);
for(int i=0;i<tmp2.length();i++){
m[tmp2[i]] = true;
}
for(int i=0;i<tmp1.length();i++){
if(m[tmp1[i]]==false) cout<<tmp1[i];
}
return 0;
}