Leetcode: Anagrams
来源:互联网 发布:招商银行贵金属软件 编辑:程序博客网 时间:2024/06/07 02:22
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
题意理解有些困惑,其实是返回变位词个数大于等于2的所有单词,全部放到一个vector里面去。
然后就比较简单了,编程珠玑里面有提到。
class Solution {public: vector<string> anagrams(vector<string> &strs) { vector<string> result; if (strs.size() <= 1) { return result; } vector<pair<string, string>> strnodes; string sorted; for (int i = 0; i < strs.size(); ++i) { sorted = strs[i]; sort(sorted.begin(), sorted.end()); strnodes.push_back(make_pair(strs[i], sorted)); } sort(strnodes.begin(), strnodes.end(), anagram_less); int count = 1; sorted = strnodes[0].second; int i = 1; for (; i < strnodes.size(); ++i) { if (strnodes[i].second == sorted) { ++count; } else { if (count >= 2) { for (int j = i - count; j < i; ++j) { result.push_back(strnodes[j].first); } } sorted = strnodes[i].second; count = 1; } } if (count >= 2) { for (int j = i - count; j < i; ++j) { result.push_back(strnodes[j].first); } } return result; } static bool anagram_less(pair<string, string> p1, pair<string, string> p2) { return p1.second < p2.second; }};
================第二次=================
class Solution {public: vector<string> anagrams(vector<string> &strs) { unordered_map<string, multiset<string>> groups; for (int i = 0; i < strs.size(); ++i) { string sorted = strs[i]; sort(sorted.begin(), sorted.end()); auto iter = groups.find(sorted); if (iter == groups.end()) { multiset<string> group; group.insert(strs[i]); groups[sorted] = group; } else { iter->second.insert(strs[i]); } } vector<string> result; for (auto iter = groups.begin(); iter != groups.end(); ++iter) { if (iter->second.size() >= 2) { result.insert(result.end(), iter->second.begin(), iter->second.end()); } } return result; }};
貌似Leetcode里面不要求回文字符串相邻,可以进一步简化一些:
class Solution {public: vector<string> anagrams(vector<string> &strs) { vector<string> result; unordered_map<string, int> groups; for (int i = 0; i < strs.size(); ++i) { string sorted = strs[i]; sort(sorted.begin(), sorted.end()); auto iter = groups.find(sorted); if (iter == groups.end()) { groups.insert({sorted, i}); } else { result.push_back(strs[i]); if (iter->second >= 0) { result.push_back(strs[iter->second]); iter->second = -1; } } } return result; }};
0 0
- LeetCode: Anagrams
- LeetCode: Anagrams
- LeetCode Anagrams
- Leetcode: Anagrams
- [Leetcode] Anagrams
- LeetCode : Anagrams
- [leetcode] anagrams
- LeetCode Anagrams
- [LeetCode] Anagrams
- [LeetCode]Anagrams
- [leetcode]Anagrams
- leetcode anagrams
- [leetcode] Anagrams
- LeetCode-Anagrams
- LeetCode - Anagrams
- Leetcode: Anagrams
- 【Leetcode】Anagrams
- LeetCode Anagrams
- log4jdbc日志框架
- 1 android下的数据持久化,保存数据到rom文件
- javascript 数组详解 Array
- iOS7下status bar相关问题的解决方法
- VxWorks增加组件
- Leetcode: Anagrams
- [cocos2d-x]对CCSprite进行高斯模糊
- HDU 1062(水题)
- 在Ubuntu上使用vsftpd搭建FTP服务器
- secureCRT给我加了个0D
- ZOJ-2240
- VS2005 添加右键快捷菜单
- HDU 1064(水题)
- easymock单元测试实例二