你有乙個單詞列表 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 之後,我們就得到了所需的單詞,那麼單詞與模式是匹配的。回想一下,字母的排列是從字母到字母的雙射 每個字母對映到另乙個字母,...