給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。
示例:輸入: [「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...