anagrams 查找序列里具有相同字符但顺序不同的单词
2018-09-15 23:37
1131 查看
[LeetCode] Anagrams
Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be in lower-case. 思路:Anagrams指几个string有相同的字符,但不同的字符顺序。所以一个有效的检查方法是:当两个string排序以后相同,则它们是anagrams。可以使用一个hash table,string s的key是它自己排序后的string,这样anagrams会有相同的key。用一个vector<int>来记录相同key的string在input vector<string>中的index。最后扫描一遍hash table,当有两个或以上string有相同的key时,将它们输出到结果。
class Solution { public: vector<string> anagrams(vector<string> &strs) { vector<string> res; unordered_map<string,vector<int>> ht; for(int i=0;i<strs.size();++i) { string s=strs[i]; sort(s.begin(),s.end()); ht[s].push_back(i); } for(unordered_map<string,vector<int>>::iterator it=ht.begin();it!=ht.end();++it) { if(it->second.size()>1) { for(int i=0;i<it->second.size();++i) res.push_back(strs[it->second[i]]); } } return res; } };
相关文章推荐
- Hash(篇1)实现一个函数来查找具有相同唯一字符集的所有单词
- 小易喜欢的单词具有以下特性: 1.单词每个字母都是大写字母 2.单词没有连续相等的字母 3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。 例如: 小易不喜欢"ABBA",因为这里有两个连续的'B' 小易不喜欢"THETXH",因为这里包含子序列"THTH" 小易不喜欢"ABACADA",因为这里包含子序列"AAAA" 小易喜欢"
- 编写一个程序,输入一串不超过60个字符组成的且不包含换行符的字符串,将字符串中的A到Z的字母按英文字典字母顺序重新排列,排列后的单词的长度要与原始句子中的长度相同,并且要求只对A到Z的字母重新排列,其
- go判断两个字符串是否是是相互打乱的,也就是说它们有着相同的字符,但 是对应不同的顺序。
- 假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配, 比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同, 所以这两个字符串是匹配的。要求高效!
- 编写一个函数,判断两个字符串是否是是相互打乱的,也就是说它们有着相同的字符,但是对应不同的顺序。
- 给定一个字符串列表,找出单词中最长单词,可以用l列表中的其他单词一次构建一个字符。返回具有最小字典顺序的最长单词。
- Valid Anagram:验证不考虑字母顺序不同的单词是否相同
- 80x86 汇编语言:键控顺序显示不同符号序列
- 两个数组元素相同,顺序不同,进行正确匹配
- leetcode49-Group Anagrams(同构词(相同字母组成的单词)分类)
- 剑指Offer41 反转单词顺序,单词字符顺序不变
- 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。(笔试题) 句子中单词以空格符隔开。为简单起见,没有标点符号。 例如输入“I am a student”,则输出“student a
- 输入一个英文句子,翻转句子中单词的顺序,单词内字符顺序不变
- 不同机器下,游戏编程如何保证物体移动具有相同的速度
- 编程菜鸟的日记-初学尝试编程-寻找等长数组A与B(所含元素相同,顺序不同)相匹配的元素即a[i]=b[j]
- (Java)输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,句子中单词以单个空格符隔开
- 如何使用ACCESS查找两表中的相同项和不同项
- python查找指定具有相同内容文件的方法
- 去哪儿网C++笔试题--二分查找、最先出现两次的字符、每个字符串中的单词个数