1. 程式人生 > 其它 >寶石與石頭:LeetCode第771題

寶石與石頭:LeetCode第771題

技術標籤:演算法題字串leetcode演算法

給定字串 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:
在這裡插入圖片描述