From bfaa6716054c312d1e8138dd97ec090743ce4448 Mon Sep 17 00:00:00 2001 From: colorbox Date: Thu, 24 Oct 2024 21:38:43 +0900 Subject: [PATCH] Add step1 ~ 3 --- 49/step1.cpp | 22 ++++++++++++++++++++++ 49/step2.cpp | 19 +++++++++++++++++++ 49/step2_2.cpp | 21 +++++++++++++++++++++ 49/step2_3.cpp | 26 ++++++++++++++++++++++++++ 49/step3.cpp | 16 ++++++++++++++++ 5 files changed, 104 insertions(+) create mode 100644 49/step1.cpp create mode 100644 49/step2.cpp create mode 100644 49/step2_2.cpp create mode 100644 49/step2_3.cpp create mode 100644 49/step3.cpp 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; + } +};