[LeetCode] Anagrams solution
来源:互联网 发布:淘宝店仓库在哪里 编辑:程序博客网 时间:2024/06/06 07:51
Given an array of strings, return all groups of strings that are anagrams.
Notes:All inputs will be in lower-case.
Ideas: What is Anagrams? 就是异位构词,指颠倒字母顺序组成的单词。 单词的长度和字母都相同,只是字母顺序不一样。
这个Anagram 有个基础题,就是求两个字符串是否是Anagram。两种方法:1)用hashmap<character, int> 建立第一个字符串的字符和个数的对。然后对比第二个字符串,如果有字符,就将字符 个数-1, 如果map 中没有第二个字符串的某个字符,或者最后某个字符个数大于1,则两个字符串不是Anagram. 否则,就是的。时间复杂度是O(n), 空间复杂度O(n). 2) 排序,对比就行。
这个题目就是这个基础题的扩展:找n 个字符串中的Anagrams. 思路:排序:让Anagrams 一样。 然后用map<string, int> 记录 排序的字符和下标。循环找,如果找到,就将原来的字符串存到结果中。
class Solution {public: vector<string> anagrams(vector<string> &strs) { vector <string> res; int size = strs.size(); if(size <= 1) return res; unordered_map<string, int> map; for(int i = 0; i < size; i++) { string s = strs[i]; sort(s.begin(), s.end()); if(map.find(s) == map.end()) { map.insert(make_pair(s, i)); } else { if(map[s] >= 0){ res.push_back(strs[map[s]]); map[s] = -1; } res.push_back(strs[i]); } } return res; }};
注 基本知识点:
vector 使用
map 使用
make_pair(s, i) 方法
0 0
- LeetCode Anagrams My solution
- [LeetCode] Anagrams solution
- Lintcode171 Anagrams solution 题解
- 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
- Pomelo:网易开源基于 Node.js 的游戏服务端框架
- Android DNS 代码分析
- 插入排序
- POSTGRESQL交叉表的实现
- Hbase原理、基本概念、基本架构
- [LeetCode] Anagrams solution
- 对排序思想的认识
- 内存的区别
- JAVA 自带定时器详解
- 命名——程序员难题之一
- 第13周项目5-字符串操作(7、每个小写字母出现的个数)
- 从零开始学习Windows WDF驱动程序开发
- C# 6.0那些事
- TXT操作