diff --git a/49/step1.cpp b/49/step1.cpp new file mode 100644 index 0000000..701c084 --- /dev/null +++ b/49/step1.cpp @@ -0,0 +1,22 @@ +/* +Time: 7:07 + +Time: O(N * M log M) +Space: O(N * M) +*/ +class Solution { +public: + vector> groupAnagrams(vector& strs) { + map> sorted_to_str; + for (auto str: strs) { + string key = str; + sort(key.begin(), key.end()); + sorted_to_str[key].push_back(str); + } + vector>grouped_anagrams; + for (auto [key, group]: sorted_to_str) { + grouped_anagrams.push_back(group); + } + return grouped_anagrams; + } +}; diff --git a/49/step2.cpp b/49/step2.cpp new file mode 100644 index 0000000..da29b99 --- /dev/null +++ b/49/step2.cpp @@ -0,0 +1,19 @@ +/* +無駄なコピーをなくして空間計算量を改善。 +*/ +class Solution { +public: + vector> groupAnagrams(vector& strs) { + map> sorted_to_str; + for (auto& str: strs) { + string key = str; + sort(key.begin(), key.end()); + sorted_to_str[key].push_back(str); + } + vector>grouped_anagrams; + for (auto& [key, group]: sorted_to_str) { + grouped_anagrams.push_back(move(group)); + } + return grouped_anagrams; + } +}; diff --git a/49/step2_2.cpp b/49/step2_2.cpp new file mode 100644 index 0000000..2ebe564 --- /dev/null +++ b/49/step2_2.cpp @@ -0,0 +1,21 @@ +/* +sortを利用せずに時間計算量を改善 +*/ +class Solution { +public: + vector> groupAnagrams(vector& strs) { + map, vector> sorted_to_str; + for (auto& str: strs) { + vector keys(26); + for (char c : str) { + keys[c - 'a']++; + } + sorted_to_str[keys].push_back(str); + } + vector>grouped_anagrams; + for (auto& [key, group]: sorted_to_str) { + grouped_anagrams.push_back(move(group)); + } + return grouped_anagrams; + } +}; diff --git a/49/step2_3.cpp b/49/step2_3.cpp new file mode 100644 index 0000000..747d5f7 --- /dev/null +++ b/49/step2_3.cpp @@ -0,0 +1,26 @@ +/* +文字列構築にstd::ostringstreamを使う +*/ +class Solution { +public: + vector> groupAnagrams(vector& strs) { + map> sorted_to_str; + for (auto& str: strs) { + vector counter(26); + for (char c : str) { + counter[c - 'a']++; + } + std::ostringstream key; + for (auto& count : counter) { + key << "#" << to_string(count); + } + + sorted_to_str[key.str()].push_back(str); + } + vector>grouped_anagrams; + for (auto& [key, group]: sorted_to_str) { + grouped_anagrams.push_back(move(group)); + } + return grouped_anagrams; + } +}; diff --git a/49/step3.cpp b/49/step3.cpp new file mode 100644 index 0000000..844b445 --- /dev/null +++ b/49/step3.cpp @@ -0,0 +1,16 @@ +class Solution { +public: + vector> groupAnagrams(vector& strs) { + map> sorted_to_strings; + for (auto& str : strs) { + string key = str; + sort(key.begin(), key.end()); + sorted_to_strings[key].push_back(str); + } + vector> grouped_anagrams; + for (auto& [key, strings] : sorted_to_strings) { + grouped_anagrams.push_back(move(strings)); + } + return grouped_anagrams; + } +};