力扣1178 猜字謎 C語言實現 困難題

2022-07-06 00:57:09 字數 2366 閱讀 2570

傳送門

外國友人仿照中國字謎設計了乙個英文版猜字謎小遊戲,請你來猜猜看吧。

字謎的迷面 puzzle 按字串形式給出,如果乙個單詞 word 符合下面兩個條件,那麼它就可以算作謎底:

單詞 word 中包含謎面 puzzle 的第乙個字母。

單詞 word 中的每乙個字母都可以在謎面 puzzle 中找到。

例如,如果字謎的謎面是 "abcdefg",那麼可以作為謎底的單詞有 "faced", "cabbage", 和 "baggage";而 "beefed"(不含字母 "a")以及 "based"(其中的 "s" 沒有出現在謎面中)。

返回乙個答案陣列 answer,陣列中的每個元素 answer[i] 是在給出的單詞列表 words 中可以作為字謎迷面 puzzles[i] 所對應的謎底的單詞數目。

示例:

輸入:

words = ["aaaa","asas","able","ability","actt","actor","access"],

puzzles = ["aboveyz","abrodyz","abslute","absoryz","actresz","gaswxyz"]

輸出:[1,1,3,2,4,0]

解釋:1 個單詞可以作為 "aboveyz" 的謎底 : "aaaa"

1 個單詞可以作為 "abrodyz" 的謎底 : "aaaa"

3 個單詞可以作為 "abslute" 的謎底 : "aaaa", "asas", "able"

2 個單詞可以作為 "absoryz" 的謎底 : "aaaa", "asas"

4 個單詞可以作為 "actresz" 的謎底 : "aaaa", "asas", "actt", "access"

沒有單詞可以作為 "gaswxyz" 的謎底,因為列表中的單詞都不含字母 'g'。

1 <= words.length <= 10^5

4 <= words[i].length <= 50

1 <= puzzles.length <= 10^4

puzzles[i].length == 7

words[i][j], puzzles[i][j] 都是小寫英文本母。

每個 puzzles[i] 所包含的字元都不重複。

*/

int* findnumofvalidwords(char ** words, int wordssize, char ** puzzles, int puzzlessize, int* returnsize)

本題所需要的是對於元素的核查,不考慮遂於元素的個數核查,只考慮對於元素是否存在的核查即可。謎面與謎底之間的聯絡是:謎底的組成字母一定在謎面內存在。如果存在對於元素的核查裡就可以加1處理來統計對應的謎面下能推得的謎底的個數。

題解傳送門

struct unordered_map ;

int* findnumofvalidwords(char** words, int wordssize, char** puzzles, int puzzlessize, int* returnsize)

if (__builtin_popcount(mask) <= 7) else }}

int* ans = malloc(sizeof(int) * puzzlessize);

*returnsize = 0;

for (int i = 0; i < puzzlessize; i++)

// }

// mask |= (1 << (puzzles[i][0] - 'a'));

// struct unordered_map* tmp;

// hash_find_int(frequency, &mask, tmp);

// if (tmp != null)

// }

// 列舉子集方法二

力扣 1178 猜字謎 位運算 思維

思路 看完題目會發現關鍵點是乙個單詞 現的字元種類,和個數沒有關係,那麼我們可以用位運算表示某個單詞含有的字元種類。具體做法是,如果它含有小寫字母x xx,我們就可以把它二進位制表示的第x a x a x a 位置為1 11。這樣就將字串變成了整數,接下來構建乙個雜湊表,記錄某個整數所對應的字串個數...

力扣c語言實現 682 棒球比賽

原題目連線 你現在是棒球比賽記錄員。給定乙個字串列表,每個字串可以是以下四種型別之一 1.整數 一輪的得分 直接表示您在本輪中獲得的積分數。2.一輪的得分 表示本輪獲得的得分是前兩輪有效 回合得分的總和。3.d 一輪的得分 表示本輪獲得的得分是前一輪有效 回合得分的兩倍。4.c 乙個操作,這不是乙個...

力扣c語言實現 7 整數反轉

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉...