No 49 Anagrams 易位構詞

2022-07-31 01:36:16 字數 1583 閱讀 7452

no.49 anagrams

given an array of strings, return all groups of strings that are anagrams.

note: all inputs will be in lower-case.

難點:1、沒有讀清題意,對易位構詞的理解不到位

2、題意不明了。輸入為一系列字串,別與回文記混淆了

3、第一次見到,不是很了解,完全沒思路

具體分析:

易位構詞:兩個單詞所包含的字元和數量一樣,但順序不同【相當於一組字元的不同序列】

判斷兩個單詞是否為anagram的方法

對於本題,是在很多字串裡面按照anagram分類,若使用hashmap的方法,兩兩匹配,在分組時會比較麻煩;而對於法二使用排序演算法,其優勢在於可以使用排序後的字串作為乙個key,即乙個易位構詞類的id。這樣一來,只需要對每個字串排序,然後建立hashmap,key為排序後的串,value為所有屬於這個key類的字串【靈活一點,可以用字串陣列的索引表示】,這樣就可以進行簡單的分類。若有n個字串,字串最大空間為k,那麼該演算法的時間複雜度為o(nklogk),其中o(klogk)是對每個字串進行排序(若用線性演算法也可以提高),空間複雜度為o(nk),即hashmap的大小。

根據返回值,最後還要對hashmap進行整理。

我理解之後提交的**:

1 #include "

stdafx.h

"2 #include 3 #include

4 #include 5 #include 6 #include 7

using

namespace

std;89

class

solution

1024 vectorresult;

25for(auto const &ip : exists)

2632}33

34//

for(auto it : result)

35//

cout << it << " ";

36//

cout << endl;

37return

result;38}

39};

40int

main()41;

44 vector test(data,data+8

);45

sol.anagrams(test);

4647

return0;

48 }

網上另一種解法,雖然也能輸出,但是,相同易位構詞並不會在一類全部輸出之後,再輸出另一類;但它需要的儲存空間比較小

1

class

solution

16else

1723

//在本類已存在過的情況下[已置為-1],會輸出所有,包括第二次輸出的

24res.push_back(strs[i]);25}

26}27return

res;28}

29 };

view code

參考:anagrams -- leetcode

牛客競賽Anagram

一 題目 二 題意 給定兩個長度一樣的字串 均為大寫字母 計算將a變為和b一樣的構成最少需要多少步。三 思路 將a和b分別按字母順序排序,由於可能存在輪迴向前找的情況,為了避免繞大圈,所以直接將a的當前字母和b的尾巴上未匹配的字母進行操作。四 include include include intc...

LeetCode 字串系列(Anagram)

49.group anagrams 題目 將輸入字串組按組成分類,輸出分類好的字串組 思路 hashmap 設定hashmap,key為每類字串按公升序排列,value為該類所有字串 list 對於輸入的每個字串,進行字元陣列轉換,再進行排序,然後轉換回字串,如果hashmap中不包含該類字串,就建...

趣題 Anagram輔助程式的資料結構

anagram是乙個比較流行的英文文字遊戲,本blog之前曾經介紹過,這裡我再提一下。anagram就是把乙個詞或者一句話裡的字母重新排列,組成乙個新的單詞或句子,通常前後兩者有一種諷刺的意味。比如,dormitory dirty room,或者desperation a rope ends it。...