PAT (Basic Level) 1039 到底买不买(模拟)
生活随笔
收集整理的這篇文章主要介紹了
PAT (Basic Level) 1039 到底买不买(模拟)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:點擊查看
題目大意:給出兩個字符串a和b,問b是否能完全包含a,意思就是b中的所有字母在a中能否都找到一個對應的字母
題目分析:這個題一開始想復雜了,可以先開一個稍大點的vis數組用來記錄個數,然后記錄ASCII碼就行,先遍歷一遍字符串a,記錄每個字符出現的個數,然后再遍歷一遍b,從中減去出現的字符即可,若在中間過程中出現了有的字符數目變為負數的情況,就說明字符串a還不足以包含字符串b,這樣我們就能輕松判斷該輸出yes還是no的情況了
若最后需要輸出yes,那么答案就是字符串a和字符串b的長度之差,若最后需要輸出no,那么我們需要遍歷一遍所有的字符,然后統計一下值為負數的字符的數量即可(這里需要再理解一下,一開始我是以為需要再遍歷一遍字符串b來找答案,結果WA了兩個測試點,經過大佬的提醒才想到,如果遍歷的是字符串b的話,會重復計算答案)
代碼:
#include<iostream> #include<cstdlib> #include<string> #include<cstring> #include<cstdio> #include<algorithm> #include<climits> #include<cmath> #include<cctype> #include<stack> #include<queue> #include<list> #include<vector> #include<set> #include<map> #include<sstream> #include<unordered_map> using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=110;int vis[150];int main() { // freopen("input.txt","r",stdin);string a,b;cin>>a>>b;for(int i=0;i<a.size();i++)vis[a[i]]++;bool flag=true;for(int i=0;i<b.size();i++){if(!vis[b[i]])//noflag=false;vis[b[i]]--;}if(flag){cout<<"Yes ";cout<<a.size()-b.size()<<endl;}else{cout<<"No ";int ans=0;for(int i=0;i<150;i++)if(vis[i]<0)ans+=-vis[i];cout<<ans<<endl; }return 0; }?
總結
以上是生活随笔為你收集整理的PAT (Basic Level) 1039 到底买不买(模拟)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT (Basic Level) 10
- 下一篇: PAT (Basic Level) 10