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. hdu4707 Pet

    Pet Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...

  2. 设计模式6:Composite

    Entry.java: package gendwang.cisco.com; public abstract class Entry { private int height = 0; privat ...

  3. Oracle 经常使用的改动语句

    一.表Table 測试表:MY_TEST_TABLE -- Create table create table MY_TEST_TABLE ( A VARCHAR2(30), B NUMBER(10) ...

  4. Flex上传文件

    前几天写了一篇jsp页面利用ajaxFileUpload上传文件.如今把flex上传页面也分享出来: 前台页面 <?xml version="1.0" encoding=&q ...

  5. UVA它11292 - Dragon of Loowater

    Problem C: The Dragon of Loowater Once upon a time, in the Kingdom of Loowater, a minor nuisance tur ...

  6. 奇葩的UI引用LayoutInflater.from问题

    今收到BUG一枚,一个页面的EditText的风格变为了系统默认(系统经过定制,风格和普通的不同) 经检查xml无任何不妥,最终问题出在LayoutInflater.from上. 如果LayoutIn ...

  7. 基于visual Studio2013解决面试题之0209最大堆排序

     题目

  8. Lucene之删除索引

    1.前言 之前的博客<Lucene全文检索之HelloWorld>已经简单介绍了Lucene的索引生成和检索.本文着重介绍Lucene的索引删除. 2.应用场景: 索引建立完成后,因为有些 ...

  9. 谁说程序员都是苦逼的——看看兄弟连上海S2班的点点滴滴

    时间过的很快,上海校区第三期马上临近开班,第一期的学员也结束了自己第一个项目.         今天,2013.05.08日,我亲自参加了S01的第一个项目答辩,也为你们记录下了这样那样的一些时刻.其 ...

  10. gap锁 对于unique index 和Ununique index

    Session 1: mysql> select * from s100; +-----+------+------+ | sn | id | info | +-----+------+---- ...