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 1. 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.

注意:考场上可能关闭快的服务器,只留慢的,所以两层for循环不保险
两层for循环:
#include<bits/stdc++.h>
using namespace std;
const int maxn=10010;

int main(){
    char s1[maxn];
    char s2[maxn];
    cin.getline(s1,maxn);
    cin.getline(s2,maxn);
    for(int i=0;s1[i]!='\0';i++){
        for(int j=0;s2[j]!='\0';j++){
            if(s1[i]==s2[j]){
                s1[i]='0';
            }
        }
    }
    for(int i=0;s1[i]!='\0';i++){
        if(s1[i]!='0'){
            printf("%c",s1[i]);
        }
        else{
            continue;
        }
    }
    printf("\n");
    return 0;
}

优化代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=100010;
char s1[maxn];
char s2[maxn];
bool flag[maxn]={false};
int main(){
    cin.getline(s1,maxn);
    cin.getline(s2,maxn);
    int ls1=strlen(s1);
    int ls2=strlen(s2);
    for(int i=0;i<ls2;i++){
        flag[s2[i]]=true;//将字符转化为整形,作为下标存储
    }
    for(int i=0;i<ls1;i++){
        if(flag[s1[i]]==false){//相同下标下为false,则输出
            printf("%c",s1[i]);
        }
    }
    printf("\n");
    return 0;
}

 



posted @ 2021-02-02 22:51  XA科研  阅读(47)  评论(0编辑  收藏  举报