leetcode 49: anagrams

leetcode-anagrams

// leetcode 49: 將由相同字母組成的字符串進行分類
// 解題思路:將字符串進行排序,排序完一樣的字符串歸爲一類
// 使用map來對字符串進行歸類,最後轉換爲vector二維數組
// 本題不要求最後輸出的順序

#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;

string sortStr(string str) {
	// 注意初始化
	int count[26] = { 0 };
	int n = str.size();
	for (int i = 0; i < n;++i) {
		count[str[i] - 'a']++;
	}
	string res = "";
	for (int i = 0; i < 26; ++i) {
		res += string(count[i], i + 'a');
	}
	return res;
}

vector<vector<string>> groupAnagrams(vector<string>& strs) {
	vector<vector<string>> result;
	unordered_map<string, vector<string>> dataset;
	int n = strs.size();
	for (int i = 0; i < n; ++i) {
		dataset[sortStr(strs[i])].push_back(strs[i]);
	}
	for (auto data : dataset) {
		result.push_back(data.second);
	}
	return result;
}

int main() {
	vector<string> data;
	int n;
	cin >> n;
	string str;
	for (int i = 0; i < n; ++i) {
		cin >> str;
		data.push_back(str);
	}
	vector<vector<string>> res = groupAnagrams(data);
	int len1 = res.size();
	for (int i = 0; i < len1; ++i) {
		for (int j = 0; j < res[i].size(); ++j) {
			cout << res[i][j] << " ";
		}
		cout << endl;
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章