第一题
先准备一个哈希表统计数组中字母出现的次数,再在哈希表中找是否有同时出现过大小写的字母(即查找哈希表中h[a]和h[a + 32]是否同时大于0),如有则记录下来,并与之前的记录比较,如果该结果比之前结果好则替换,如果最后无结果替换’0‘,则返回空。
class Solution {
public:
string greatestLetter(string s) {
unordered_map<int, int> h;
string p = "0";
string q = "";
for(char a:s)
{
++ h[a];
}
for(char a:s)
{
if(h[a] > 0 && h[a + 32] > 0){
if(p[0] < a){
p[0] = a;
}
}
}
if(p[0] != '0')return p;
else{
return q;
}
}
};
第二题
找数学规律可知,一个数与k相乘的个位等于num时,若该数与k之积还小于等于num,则这样的多重集的最小大小即为该数,直接返回该数即可,如在1到10中未找到该数,则不存在这样的多重集
class Solution
{
public:
int minimumNumbers(int num, int k)
{
if (num == 0) return 0;
for (int n = 1; n < 11; n ++)
{
if (n * k % 10 == num % 10)
{
if (n * k <= num)return n;
break;
}
}
return -1;
}
};