LeetCode题解:Anagrams
2013-10-26 15:11
357 查看
Anagrams
Given an array of strings, return all groups of strings that are anagrams.Note: All inputs will be in lower-case.
思路:
关键在于对题目的理解。本文中anagrams指只有字母排列顺序不同的单词,例如eat,ate,tea。倘若有多组anagrams,那么返回所有的anagrams。两个空字符串也算一对anagrams。那么这个问题就可以使用hash的方法来解决。有很多种不同的hash方法,可以马上想到的有排过序的字符串作为hash key,或者按字母计数生成一个hash key。这里采用后者。
题解:
class Solution { public: struct StringHash { char hash[26]; StringHash(const string& str) { fill(hash, hash+26, 0); for(auto& ch : str) ++ hash[ch - 'a']; } bool operator<(const StringHash& sh) const { for(size_t i = 0; i < 26; ++i) if ( this->hash[i] < sh.hash[i] ) return true; else if ( this->hash[i] > sh.hash[i] ) return false; return false; } }; vector<string> anagrams(vector<string> &strs) { map<StringHash, vector<vector<string>::iterator>> hash_map; for(auto iter=begin(strs); iter != end(strs); ++iter) hash_map[StringHash(*iter)].push_back(iter); vector<string> ret; for(auto hsm : hash_map) if (hsm.second.size() >= 2) for(auto i : hsm.second) ret.push_back(*i); return ret; }
相关文章推荐
- 注重实效的程序员
- 第五章及其嵌套类
- Matlab基本函数-ceil函数
- 【多线程】——join()方法实现并行计算
- php中实现HmacMd5算法的源代码
- PHP上传图片在不同浏览器和浏览器模式中的问题及解决 image/jpeg 和 image/pjpeg
- 【面向对象】——编译时看父类,运行时看子类
- django1.5.5使用mysql
- Eqs hash表存储,注意hash要用char类型
- 关于java正则表达式贪婪模式和勉强模式的研究
- Lucene 需要索引的文本文件太大,怎么解决?
- LDD3源码学习日记<四>
- LeetCode:Candy
- hdu 2897 邂逅明下 博弈
- Django class-based view
- Java中常用的时间的计算
- 【重点】让类对象具有比较性,装入TreeSet【用来排序】
- 学习笔记(一)之示例程序:计算每年的最高温度MaxTemperature
- poj——2063——Investment(dp)
- can't connect to X11 server,Cannot initialise screen