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 }
1view codeclass
solution
16else
1723
//在本類已存在過的情況下[已置為-1],會輸出所有,包括第二次輸出的
24res.push_back(strs[i]);25}
26}27return
res;28}
29 };
參考: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。...