(LeetCode 49)Anagrams
2015-08-01 11:11
260 查看
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
Anagrams是指由颠倒字母顺序组成的单词,比如“dormitory”颠倒字母顺序会变成“dirty room”,“tea”会变成“eat”。
回文构词法有一个特点:单词里的字母的种类和数目没有改变,只是改变了字母的排列顺序。
需要考虑的是出现三个或三个以上的判断条件,这时数组式的hash表已无法满足,因此可以采用map<string,int>,通过key-value的形式来记录;
当string没有出现过,则对应的value为字符串数组的下表i,即map[string]=i;
当string已出现过一次,则对应的value可以设为-1,并输出该对应的字符串,即map[string]=-1;
当string出现过一次以上,即map[string]==-1,则直接输出该s对应的字符串;
Note: All inputs will be in lower-case.
题目:
给一组字符串,返回所有满足Anagrams(回文构词法)的字符串;Anagrams是指由颠倒字母顺序组成的单词,比如“dormitory”颠倒字母顺序会变成“dirty room”,“tea”会变成“eat”。
回文构词法有一个特点:单词里的字母的种类和数目没有改变,只是改变了字母的排列顺序。
思路:
满足Anagrams的字符串中的字符种类和数目都一样,如果对字符串排序,那么他们必定是相等,于是可以想到通过Hash表来判断该字符串是否出现过,如果出现过,即满足Anagrams;需要考虑的是出现三个或三个以上的判断条件,这时数组式的hash表已无法满足,因此可以采用map<string,int>,通过key-value的形式来记录;
当string没有出现过,则对应的value为字符串数组的下表i,即map[string]=i;
当string已出现过一次,则对应的value可以设为-1,并输出该对应的字符串,即map[string]=-1;
当string出现过一次以上,即map[string]==-1,则直接输出该s对应的字符串;
代码:
class Solution { public: vector<string> anagrams(vector<string>& strs) { vector<string> result; int len=strs.size(); if(len<2) return result; map<string,int> anagrams; string aStr; for(int i=0;i<len;i++){ aStr=strs[i]; sort(aStr.begin(),aStr.end()); if(anagrams.find(aStr)==anagrams.end()) anagrams[aStr]=i; else{ if(anagrams[aStr]>=0){ result.push_back(strs[anagrams[aStr]]); anagrams[aStr]=-1; } result.push_back(strs[i]); } } } };
相关文章推荐
- 理解IP路由器原理及工作机制
- system()详解
- SQL增加约束
- 统计字符串中各类字符的个数
- MFC 窗口基本框架
- IOS 页面跳转
- 模板维护-模板解析
- 20150801
- 模板维护-模板解析
- Servlet 单例多线程【转】
- nginx的优化
- 在ubuntu下,压缩virtualbox的vdi后缀的磁盘文件
- leetcode 58: Length of Last Word
- Maven 之 profile 介绍(转载)
- SQL基础学习_06_集合运算和联结
- [转]Cocos Studio和Cocos2d-x版本对应关系
- 简单的跑马灯效果
- WinCE设备动态链接库的制作与调用
- java 二维数组格式化显示
- [翻译]用 Puppet 搭建易管理的服务器基础架构(3)