外國友人仿照中國字謎設計了乙個英文版猜字謎小遊戲,請你來猜猜看吧。
字謎的迷面 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』。
將word單詞壓縮成int型別,通過列舉puzzle的子集,匹配對應的word
class
solution
if(integer.
bitcount
(mask)
<=7)
map.
put(mask,map.
getordefault
(mask,0)
+1);
} list
list=
newarraylist
<
>()
;for
(string puzzle : puzzles)
int sub=mask;
dowhile
(sub!=mask)
; list.
add(cur);}
return list;
}}
力扣 1178 猜字謎 位運算 思維
思路 看完題目會發現關鍵點是乙個單詞 現的字元種類,和個數沒有關係,那麼我們可以用位運算表示某個單詞含有的字元種類。具體做法是,如果它含有小寫字母x xx,我們就可以把它二進位制表示的第x a x a x a 位置為1 11。這樣就將字串變成了整數,接下來構建乙個雜湊表,記錄某個整數所對應的字串個數...
leetcode 1178 子集 狀態壓縮
這個題是比較難的乙個題,每批輸入給的單詞數和謎題數都很多,o n 2n 2 n2 是行不通的。由於題目中要求單詞中字母的多樣性要少於謎題,即匹配代表著單詞中的字母在謎題中都出現。所以我們預存所有單詞的表示到雜湊表中,同時計算謎題的所有子集 謎題長度最多7位 這樣查詢謎題,就會變快。這裡有兩個難點,乙...
猜字謎遊戲
include include include int main void printf 請輸入四個不重複的數字 n for else printf da db m,n 猜數字 系統在0 9中隨機生成不重複四個數排列成四位數,然後讓猜數者每次通過從0 9中任選四個數字來猜使用的是哪四個數字和這四個數...