【PAT甲级】1084 Broken Keyboard (20 分)

题意:

输入两行字符串,输出第一行有而第二行没有的字符(对大小写不敏感且全部以大写输出)。

AAAAAccepted code:

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 string s1,s2;
 5 bool vis[507];
 6 vector<char>ans;
 7 int main(){
 8     ios::sync_with_stdio(false);
 9     cin.tie(NULL);
10     cout.tie(NULL);
11     cin>>s1>>s2;
12     int n=s1.size();
13     int p=0;
14     int pos=0;
15     for(int i=0;i<n;++i){
16         if(s1[i]==s2[p])
17             ++p;
18         else if(!vis[s1[i]-'0']){
19             if(s1[i]>='a'&&s1[i]<='z')
20                 ans.push_back(s1[i]-'a'+'A');
21             else
22                 ans.push_back(s1[i]);
23             vis[s1[i]-'0']=1;
24             if(s1[i]>='a'&&s1[i]<='z')
25                 vis[s1[i]-'a'+'A'-'0']=1;
26             else if(s1[i]>='A'&&s1[i]<='Z')
27                 vis[s1[i]-'A'+'a'-'0']=1;
28         }
29         if(p==s2.size()){
30             pos=i+1;
31             break;
32         }
33     }
34     for(int i=pos;i<n;++i)
35         if(!vis[s1[i]-'0']){
36             ans.push_back(s1[i]);
37             vis[s1[i]-'0']=1;
38             if(s1[i]>='a'&&s1[i]<='z')
39                 vis[s1[i]-'a'+'A'-'0']=1;
40             else if(s1[i]>='A'&&s1[i]<='Z')
41                 vis[s1[i]-'A'+'a'-'0']=1;
42         }
43     for(auto it:ans)
44         cout<<it;
45     return 0;
46 }

 

 

 

posted @ 2019-11-17 19:45  sewage  阅读(147)  评论(0编辑  收藏  举报