演算法 Hash BitSet 字母異位詞分組

2021-10-05 23:20:58 字數 1969 閱讀 3540

給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。

示例:輸入: [「eat」, 「tea」, 「tan」, 「ate」, 「nat」, 「bat」]

輸出:[

[「ate」,「eat」,「tea」],

[「nat」,「tan」],

[「bat」]

]說明:

利用bitset,記錄所有字母是否出現,出現則那乙個bit為1

僅適用於輸入字串都為字母且單詞內無重複字母的情況。對於單詞內有重複字母的,暫時沒有想到利用bitset來解決的方式。

class

solution

if(strs.length ==1)

map> longmap =

newhashmap

<

>()

; list

nulllist =

newarraylist

<

>()

;for

(string str : strs)

bitset bitset =

newbitset()

;char

cs = str.

tochararray()

;for

(char c : cs)

long

longs = bitset.

tolongarray()

; list

slist = longmap.

get(longs[0]

);if(slist == null)

slist.

add(str);}

if(nulllist.

size()

>0)

return resultlist;

}}

o(n*k)

o(n*k)

利用整數分解為素數法則,即每個整數都可以被分解為唯一組合的一堆素數的乘積。

所以每個單詞,都可以拆分成單獨字元後,將小寫字元對應的ascii碼-'a'得到的數字下標對應的素數的乘積

但是該方法不適合單詞過長,否則可能乘積溢位

將每個單詞先排序,然後跟hashmap中記錄比對。

這種方法時間複雜度為o(n*k*logk),空間複雜度依然是o(n*k)

將字串中每個字串統計,並使用分隔符做hashmap的key。如:abbc,則轉換後為a1#b2#c1

前端練習09 同字母異序

同字母異序指的是兩個字串字母種類和字母的數量相同,但是順序可能不同。完成isanagram,接受兩個字串作為引數,返回true或者false表示這兩個字串是否同字母異序。例如 isanagram anagram nagaram return true.isanagram rat car return...

相同字母異序詞 向量雜湊

題目 ayla有兩個字串a和b,每個字串長度為l,每個字串均由大寫英文本母組成。她想知道有多少個不同的a的子串可以在b中找到乙個子串是它的 相同字母異序詞 如果兩個字串的長度相同,組成字串的字母和每個字母出現的次數也都相同,則這兩個字串為 相同字母異序詞 例如,aabc和abac。輸入格式 第一行包...

LeetCode刷題之242 有效的字母異位詞

我不知道將去向何方,但我已在路上!示例 1 輸入 s anagram t nagaram 輸出 true示例 2 輸入 s rat t car 輸出 falseclass solution def isanagram self,s str,t str bool if len s len t retu...