题目:给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl...
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
int numJewelsInStones(char* J, char* S)
{
int w[58] = {0};
int count = 0;
char ch;
while(ch=*J++)
{
w[ch-'A']++;
}
while(ch=*S++)
{
if(w[ch-'A'])
count++;
}
return count;
一个简单的查找问题,这里使用了hashmap 的方法,对减少了查找的时间, 我的 问题是 :
ch=*J;
w[ch*-'A'];
int w[58];
char ch;
- 为什么: 可以将 char 类型的 ch 作为下标;
- 还有一个问题 : ch-'A' 得到的是对应的ASCII 的码值差;
那 ch-'0' 对应的是该字符的ASCII 码值 但是我今天在直接使用这个表达式求字母对应的码值是却不正确?
希望大神们帮我解释一下。
char
,short
,int
,long
,long long int
,enum
, 等等。'A'
的类型是int
,不是char
。ch - 'A'
的类型也是int
,不是char
。'0'
和0
('\0'
) 不是一个东西。前者其实不是0
。ch-'0'
得到的也是对应的 ASCII 码差值,但是'0'
的 ASCII 码值不是0
。