1050 String Subtraction (20 分)
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.
思路:由于题目说明所有的字符都在ASCII表中,可以设置一个长度为130的hash表,如果字符串2中的字符出现过,将其值设置为true,否则为false。遍历字符串1,对字符串1中的每个字符进行查表,如果查表值为false,将其加入到S1-S2的子串中去,否则丢弃该字符。
#include <bits/stdc++.h>
#define maxn 10004
using namespace std;
char s1[maxn];
char s2[maxn];
char sub[maxn];
int main()
{
cin.getline(s1, maxn);//输入可能有空格
cin.getline(s2, maxn);
bool inS2[130] = {false};//打表,默认所有字符没有在S2中出现
for(int i = 0; i < strlen(s2); i++)
inS2[s2[i]] = true;//标记S2中的字符
int len = 0;//S1-S2子串的长度
for(int i = 0; i < strlen(s1); i++)
{
if(!inS2[s1[i]])//当前字符不在S2中
sub[len++] = s1[i];
}
printf("%s", sub);
return 0;
}