寶石與石頭:LeetCode第771題
阿新 • • 發佈:2021-01-27
給定字串 J 代表石頭中寶石的型別,和字串 S 代表你擁有的石頭。 S 中每個字元
代表了一種你擁有的石頭的型別,你想知道你擁有的石頭中有多少是寶石。
J 中的字母不重複,J 和 S 中的所有字元都是字母。字母區分大小寫,因此"a"和"A"是不同型別的石頭。
示例 1:
輸入: J = “aA”, S = “aAAbbbb”
輸出: 3
示例 2:
輸入: J = “z”, S = “ZZ”
輸出: 0
注意:
S 和 J 最多含有 50 個字母。
J 中的字元不重複。
思路::字串S中有多少個字元在J中出現過
//方法1:
int numJewelsInStones1(char* jewels, char* stones) {
int count = 0;
for (int i = 0; stones[i] != '\0'; i++)//遍歷s中的每個字元
{
if (strchr(jewels,stones[i]))//若s[i]在j中,則返回s[i]所在位置的指標
{
count++;
}
}
return count;
}
//方法2:雜湊法
int numJewelsInStones2(char* jewels, char* stones)
{
int count = 0;
char hash[128] = { 0 };
while (*jewels != '\0')//遍歷寶石
{
hash[*jewels++] = 1;//將出現的寶石置為1
}
while (*stones != '\0')//遍歷石頭
{
if (hash[*stones++] == 1)//如果出現寶石計數器加1
{
count++;
}
}
return count;
}
strchr 函式:在字串 s 中從前到後查詢字元 c,返回字元 c 第一次在字串 s 中出現的位置,如果未找到字元 c,則返回 NULL。
strrchr 函式:在字串 s 中從後到前查詢字元 c,返回字元 c 第一次在字串 s 中出現的位置,如果未找到字元 c,則返回 NULL。
方法1:
方法2: