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

Note: All inputs will be in lower-case.

题意:anagrams的意思是回文构词法。回文构词法有一个特点:单词里的字母的种类和数目没有改变,只是改变了字母的排列顺序。如:

Input:  ["tea","and","ate","eat","den"]

Output:   ["tea","ate","eat"]

思路:因为回文构词法的单词之间仅仅是字母改变了顺序,那么我们可以先对单词进行排序,然后我们就可以通过两个单词之间是否相等,来判断是否为回文构词法形成的。那么如何来判断两个单词相等,若是拿某个单词和之前的逐个进行比较,那么时间复杂度就很高了,这里用到map,这样查找起来就方便多了。那查找之后怎么办了?对数组中的每一个字符串:

1)若是在map没有找到,则,将其下标存入,以供后面的对比;

2)若是找到了,先将之前的那个字符串和目前的这个,存入res中。

针对第二种情况,就存在一个问题了,如何避免已存入的再次存入?我们可以将之前存入的那个在map中对应的值改为-1(小于0即可),然后加一定的条件判断(若是不加条件判断,则,改为-1就没有意义了)。参考了doc_sgl代码如下:

 class Solution {
public:
vector<string> anagrams(vector<string> &strs)
{
vector<string> res; unordered_map<string,int> anagram; for(int i=;i<strs.size();++i)
{
string s=strs[i];
sort(s.begin(),s.end()); if(anagram.find(s)==anagram.end())
anagram[s]=i;
else
{
if(anagram[s]>=)
{
res.push_back(strs[anagram[s]]); //存之前
anagram[s]=-;
}
res.push_back(strs[i]); //存现在
}
}
return res;
}
};

最新文章

  1. ORACLE opatch命令学习实践
  2. 国内首个微信小程序开发者社区www.mntuku.cn
  3. jQuery : eq() vs get()
  4. eclipse 切换svn账号
  5. 关键词:ACM &amp; 大小端 &amp; 面试官
  6. Android Material Design:ViewPager与android.support.design.widget.TabLayout双向交互联动切换
  7. Iperf使用方法
  8. SSM-SpringMVC-09:SpringMVC中以继承MutiActionController类的方式实现处理器
  9. 第二周javaweb学习进度表
  10. SQL 必知必会&#183;笔记&lt;7&gt;汇总数据——使用聚合函数
  11. Linux下常用的文件传输方式介绍与比较
  12. 《React-Native系列》44、基于多个TextInput的键盘遮挡处理方案优化
  13. CentOS 6.5 搭建NFS文件服务器
  14. [py模块]random&amp;string取随机字符串
  15. php中strpos()函数
  16. 【week10】规格说明书练习-吉林市1日游
  17. go语言基础之递归函数的调用流程
  18. java----代理机制或动态类的生成
  19. ueditor在QQ浏览器或者IE浏览器中无法加载
  20. SQL0668N 不允许对表XX执行操作,原因码为 &quot;3&quot;

热门文章

  1. WebSocket协议 8 问
  2. linux 热替换so文件
  3. POJ1659 可图性判定
  4. node获取头信息数据
  5. Python自动化运维——系统性能信息模块
  6. spark优化系列一:参数介绍
  7. (转) Sqoop使用实例讲解
  8. mysql连接jdbc查询代码
  9. 命令行下对apk签名
  10. Windows下nginx作为静态资源服务器使用