力扣 890 查詢和替換模式 雜湊對映

2021-10-05 16:11:21 字數 1875 閱讀 8082

你有乙個單詞列表 words 和乙個模式 pattern,你想知道 words 中的哪些單詞與模式匹配。

如果存在字母的排列 p ,使得將模式中的每個字母 x 替換為 p(x) 之後,我們就得到了所需的單詞,那麼單詞與模式是匹配的。

(回想一下,字母的排列是從字母到字母的雙射:每個字母對映到另乙個字母,沒有兩個字母對映到同乙個字母。)

返回 words 中與給定模式匹配的單詞列表。

你可以按任何順序返回答案。

輸入:words = [「abc」,「deq」,「mee」,「aqq」,「dkd」,「ccc」], pattern = 「abb」

輸出:[「mee」,「aqq」]

解釋:「mee」 與模式匹配,因為存在排列 。

「ccc」 與模式不匹配,因為 不是排列。

因為 a 和 b 對映到同乙個字母。

class

solution

:def

findandreplacepattern

(self, words: list[

str]

, pattern:

str)

-> list[

str]

: d=

# 原理上就是把單詞abb,bcc,cdd等都變成011格式

# 把abc,dsx等變成012格式

# 然後把相同格式的單詞通過格式放到相同的組裡即可。

for i in words:

s='' dd=

n=0for ii in i:

if ii not

in dd:

dd[ii]

=str

(n) n+=

1 s+=dd[ii]

if s not

in d:

d[s]=[

] d[s]

s,dd,n='',

,0for ii in pattern:

if ii not

in dd:

dd[ii]

=str

(n) n+=

1 s+=dd[ii]

return d.get(s,

)

執行用時 :28 ms, 在所有 python3 提交中擊敗了99.41%的使用者

記憶體消耗 :13.7 mb, 在所有 python3 提交中擊敗了100.00%的使用者

優化:

class

solution

:def

findandreplacepattern

(self, words: list[

str]

, pattern:

str)

-> list[

str]

:def

hp(i)

: s,dd,n='',

,0for ii in i:

if ii not

in dd:

dd[ii]

=str

(n) n+=

1 s+=dd[ii]

return s

d=for i in words:

s=hp(i)

if s not

in d:d[s]=[

] d[s]

return d.get(hp(pattern),[

])

890 查詢和替換模式

你有乙個單詞列表words和乙個模式pattern,你想知道words中的哪些單詞與模式匹配。如果存在字母的排列p,使得將模式中的每個字母x替換為p x 之後,我們就得到了所需的單詞,那麼單詞與模式是匹配的。回想一下,字母的排列是從字母到字母的雙射 每個字母對映到另乙個字母,沒有兩個字母對映到同乙個...

890 查詢和替換模式

題目描述 你有乙個單詞列表 words 和乙個模式 pattern,你想知道 words 中的哪些單詞與模式匹配。如果存在字母的排列 p 使得將模式中的每個字母 x 替換為 p x 之後,我們就得到了所需的單詞,那麼單詞與模式是匹配的。回想一下,字母的排列是從字母到字母的雙射 每個字母對映到另乙個字...

890 查詢和替換模式

題目 你有乙個單詞列表 words 和乙個模式 pattern,你想知道 words 中的哪些單詞與模式匹配。如果存在字母的排列 p 使得將模式中的每個字母 x 替換為 p x 之後,我們就得到了所需的單詞,那麼單詞與模式是匹配的。回想一下,字母的排列是從字母到字母的雙射 每個字母對映到另乙個字母,...