PAT A1092 To Buy or Not to Buy
思路:通过下标处理将对应珠子颜色处理成哈希表中对应数字,遍历 s1 填充哈希表。再遍历 s2 减去哈希表中对应值,若哈希表中出现负数,则更新 miss。miss 大于 0,则不满足,否则直接输出 s1.size() - s2.size() 作为多余的珠子数量。
#include<iostream>
using namespace std;
const int MAXN = 1005;
int hashTable[80], miss = 0;
string s1, s2;
int change(char ch) {
if(ch >= '0' && ch <= '9') return ch - '0';
else if(ch >= 'a' && ch <= 'z') return ch - 'a' + 10;
else if(ch >= 'A' && ch <= 'Z') return ch - 'A' + 36;
return -1;
}
int main() {
cin >> s1 >> s2;
for(int i = 0; i < s1.size(); i++) {
int index = change(s1[i]);
hashTable[index]++;
}
for(int i = 0; i < s2.size(); i++) {
int index = change(s2[i]);
hashTable[index]--;
if(hashTable[index] < 0) miss++;
}
if(miss > 0) cout << "No " << miss;
else cout << "Yes " << s1.size() - s2.size();
return 0;
}