本篇博客会讲解力扣“771. 宝石与石头”的解题思路,这是题目链接。
先来审题:
以下是输出示例:
以下是提示:
本题可以使用数组模拟哈希表来实现。先把宝石字符串中的字符标识到数组的对应位置,每次拿石头字符串中的字符去对应位置找就行了。由于字符的ASCII码的范围是0~127,所以数组容量设定为128非常合适。代码如下:
int numJewelsInStones(char * jewels, char * stones){
// ASCII码的取值范围是0~127
// 使用数组存储所有宝石对应的字符
bool isJewel[128] = {0};
for (int i = 0; jewels[i]; ++i)
{
isJewel[jewels[i]] = true;
}
// 遍历石头,寻找哪些是宝石
int count = 0;
for (int i = 0; stones[i]; ++i)
{
if (isJewel[stones[i]])
++count;
}
return count;
}
完美。
总结
不一定要手搓哈希表,有些时候使用数组来模拟更加省时省力(当然C++就不用纠结这个问题了)。
感谢大家的阅读!