Given an array of strings, return all groups of strings that are anagrams.

Note: All inputs will be in lower-case.

回文字符串是指: 两个字符串的字符个数全然同样,这两个字符串是Anagrams。因此Anagrams至少指俩字符串。找出字符集合中的Anagrams组。

由此我们能够想到,仅仅要将几个单词依照字母顺序进行排序,就能够通过比較推断他们是否是anagrams。

思路:用map<string, int>记录排序后的字符串以及首次出现的位置。

1. 从strs的第一个元素開始遍历。首先对元素进行排序得到s;

2. 在map里查找s;

3. 若不存在,将s以及该元素的下标存入map<string ,int>;

4. 若存在,首先将第一次出现s时的原始字符串存入结果res,即strs[map[s]],并将map[s]设置为-1(防止下次再存),再将该字符串本身存入结果res。

5. 反复以上1-4步,直到遍历结束。

以下是代码:

<span style="font-size:14px;">class Solution {
public:
vector<string> anagrams(vector<string> &strs) {
vector<string> res;//作为最后的结果集返回
if(strs.size()<=1)//仅仅有一个是不可以成为回文字符串集的
return res;
map<string,int> anagram;//暂存排序之后的字符串,同一时候还有存储在strs中的位置
for(int i = 0;i<strs.size();i++)
{
string s = strs[i];
sort(s.begin(),s.end());
if(anagram.find(s) == anagram.end())//不存在缓存map中,就插入
anagram.insert(make_pair(s,i));
else
{
if(anagram[s]>=0)//排序之前的s没有被存储在res中。因此要存储,而且把标记为置为-1
{
res.push_back(strs[anagram[s]]);
anagram[s] = -1;
}
res.push_back(strs[i]);//仅仅要是在缓存中匹配的,就说明之前有匹配的回文串。加入到结果集中
}
}
return res;
}
};</span>

每日算法之三十八:Anagrams的更多相关文章

  1. 每日算法之三十四:Multiply Strings

    大数相乘,分别都是用字符串表示的两个大数.求相乘之后的结果表示. 首先我们应该考虑一下測试用例会有哪些,先准备測试用例对防御性编程会有比較大的帮助.可以考虑一些极端情况.有以下几种用例: 1)&quo ...

  2. 每日算法之三十五:Wildcard Matching

    模式匹配的实现,'?'代表单一字符,'*'代表随意多的字符.写代码实现两个字符串是否匹配. Implement wildcard pattern matching with support for ' ...

  3. VS2010/MFC编程入门之三十八(状态栏的使用详解)

    上一节中鸡啄米讲了工具栏的创建.停靠与使用,本节来讲解状态栏的知识. 状态栏简介 状态栏相信大家在很多窗口中都能见到,它总是用来显示各种状态.状态栏实际上也是一个窗口,一般分为几个窗格,每个窗格分别用 ...

  4. 【管理心得之三十八】如果“Q”不是高富帅,也吸引不了白富美“A”

    场景再现=========================={美剧片段}一位老人在电话亭中,一次又一次地向公用电话投硬币,但是每一次仅是接通后就自动掉线了.老人无奈之下寻求他人拨打报修电话,但苦等了许 ...

  5. 每日算法之三十三:Trapping Rain Water

    这是一个非常有意思的问题,求解最大容积问题,值得动脑筋想一想. 原题例如以下: Given n non-negative integers representing an elevation map ...

  6. Java经典编程题50道之三十八

    编写一个函数:输入n为偶数时,调用函数求1/2+1/4+...+1/n:当输入n为奇数时,调用函数1/1+1/3+...+1/n. public class Example38 {    public ...

  7. ABP框架系列之三十八:(NHibernate-Integration-NHibernate-集成)

    ASP.NET Boilerplate can work with any O/RM framework. It has built-in integration with NHibernate. T ...

  8. Android学习指南之三十八:Android手势操作编程[转]

    手势操作在我们使用智能设备的过程中奉献了不一样的体验.Android开发中必然会进行手势操作方面的编程.那么它的原理是怎样的呢?我们如何进行手势操作编程呢? 手势操作原理 首先,在Android系统中 ...

  9. Android实战技巧之三十八:Handler使用中可能引发的内存泄漏

    问题描写叙述 曾几何时,我们用原来的办法使用Handler时会有以下一段温馨的提示: This Handler class should be static or leaks might occur ...

随机推荐

  1. 开源JDBC工具类DbUtils

    本篇将会详细地介绍Apache公司的JDBC帮助工具类DbUtils以及如何使用.在上一篇中我们已经通过将以前对dao层使用JDBC操作数据库的冗余代码进行了简易封装形成自己的简单工具类JdbcUti ...

  2. HDU1027 Ignatius and the Princess II 【next_permutation】【DFS】

    Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ( ...

  3. 关于yaf的控制器命名,一个纠结的问题(续)

    以下方案缺少loader相关的步骤,明天补上!!! 前面写过一篇<关于yaf的控制器命名,一个纠结的问题>.没想到yaf群里面也有跟我遇到一样问题的人,分享下解决办法. 写完那篇博文后,我 ...

  4. 让工程师爱上CMMI,实现管理于无形 --- 中标软件CMMI L5之路 (1/2)

    操作系统市场被微软等国外的IT厂商垄断的大环境下,中标软件作为市场夹缝中发展起来的民族企业,致力于成为中国操作系统旗舰企业.系列核心产品已经在政府.金融.教育.财税.公安.审计.交通.医疗.制造等行业 ...

  5. sap的示例代码

    sap的示例代码查看1.在SE38环境下的程序名输入栏输入'DEMO*'后按F4,你可以查到SAP所有的DEMO示例程序,好好看看,你会学到很多ABAP功能的实现方法.2.运行“ABAPDOCU”T- ...

  6. UVA 10795 - A Different Task(递归)

     A Different Task  The (Three peg) Tower of Hanoi problem is a popular one in computer science. Brie ...

  7. Substrings 第37届ACM/ICPC 杭州赛区现场赛C题(hdu 4455)

    http://acm.hdu.edu.cn/showproblem.php?pid=4455 https://icpcarchive.ecs.baylor.edu/index.php?option=c ...

  8. Qt之启动外部程序(使用参数很全面,还使用了setProcessChannelMode)

    简述 QProcess可以用来启动外部程序,并与它们交互. 要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串. 另外,也可以 ...

  9. 10881 - Piotr's Ants

    Problem D Piotr's Ants Time Limit: 2 seconds "One thing is for certain: there is no stopping th ...

  10. java jquery 函数多參数传递

    业务需求: 名次   伙伴 业绩 签单 面谈 每日目标 1 文彬 5100 6 10 查看目标 2 马红月 4550 4 6 查看目标 3 王刚 4100 3 9 查看目标 4 郭亚凯 3450 4 ...