第一题
解题思路:
创建两个整型数组分别用来标记是否出现了相应的大小写字母,然后按照字母表的倒序查找同时出现了大写和小写的字母,查找到符合条件的字母后返回相应的字符串
class Solution
{
public:
string greatestLetter(string s)
{
vector<int> lowletter (26,0);
vector<int> upletter(26,0);
for(int i=0;i<s.size();i++)
{
char c;
c=s[i];
if((c>='a')&&(c<='z')) //可以用islower来判定是否为小写
lowletter[c-'a']=1;
else //可以用isupper来判定是否为大写
upletter[c-'A']=1;
}
for(int i=25;i>=0;i--)//倒序查找
{
char d;
if(lowletter[i]==1&&upletter[i]==1)
{
d='A'+i;
char s[2]={d,0};//把查找得到的大写字母处理成字符串后返回
return s;
}
}
return "";
}
};
第二题
解题思路:
空多重集的和为0,如果num为0,则返回0;
所有的正整数都可以表示为10的倍数与一个小于10的数的和,
那么如果存在符合条件的n,则num-n*k应该是10的倍数,只需找出最小的n即可
class Solution
{
public:
int minimumNumbers(int num, int k)
{
if(num==0)
return 0;//空多重集的和为0,如果num为0,则返回0
for(int n=1;n<=10&&num-n*k>=0;n++)
if((num-n*k)%10==0)//(num-n*k)为10的倍数
return n;
return -1;//不存在符合条件的n值
}
};