题目

Given an array of strings, group anagrams together.

For example, given: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],

Return:

[

[“ate”, “eat”,”tea”],

[“nat”,”tan”],

[“bat”]

]

Note:

For the return value, each inner list’s elements must follow the lexicographic order.

All inputs will be in lower-case.

分析

该题目要求是将给定的一组字符串数组,按照同构词(相同字母组成的单词)分类,每组单词按照字典排序。

这道题AC算法考察的主要是哈希的思想,这样才能保证时间在要求的范围内。

开始按照常规思路,几层循环,寻找同构词,保存。。。但是结果会出现Time Limited Exceed,下面将给出两种算法实现,供对比思考。

Time Limited Exceed 代码

class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
if (strs.empty())
return vector<vector<string> >(); int len = strs.size(); vector<vector<string> > ret; for (int i = 0; i < len; i++)
{
vector<string > sv;
string tmp1 = strs[i];
sv.push_back(tmp1); sort(tmp1.begin(), tmp1.end());
for (int j = i + 1; j < len; j++)
{
string tmp2 = strs[j];
sort(tmp2.begin(), tmp2.end()); if (tmp1 == tmp2)
{
sv.push_back(strs[j]);
//将处理后的元素赋值为空
strs[j] = "";
}
}//for //按字典排序该序列
sort(sv.begin(), sv.end());
//添加到结果vector
ret.push_back(sv); }//for
return ret;
}
};

AC代码

class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
if (strs.empty())
return vector<vector<string> >(); int len = strs.size(); //将字符串数组按照字典顺序排序
sort(strs.begin(), strs.end()); //存储结果
vector<vector<string> > ret; //利用哈希思想构建map,将排序后相等的字符串存在相应的vector
map<string, vector<string>> mv; for (int i = 0; i < len; i++)
{
string str = strs[i];
sort(str.begin(), str.end()); mv[str].push_back(strs[i]);
} for (map<string, vector<string> >::iterator iter = mv.begin(); iter != mv.end(); iter++)
ret.push_back(iter->second); return ret;
}
};

GitHub测试程序源码

LeetCode(49)Group Anagrams的更多相关文章

  1. LeetCode(49): 字母异位词分组

    Medium! 题目描述: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", ...

  2. LeetCode(49)-Valid Parentheses

    题目: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the ...

  3. Leetcode(8)字符串转换整数

    Leetcode(8)字符串转换整数 [题目表述]: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我 ...

  4. Thinkphp入门 五 —模型 (49)

    原文:Thinkphp入门 五 -模型 (49) [数据库操作model模型] model  模型  数据库操作 tp框架主要设计模式:MVC C:controller   控制器   shop/Li ...

  5. Qt 学习之路 2(49):自定义只读模型

    Qt 学习之路 2(49):自定义只读模型 豆子 2013年5月5日 Qt 学习之路 2 18条评论 model/view 模型将数据与视图分割开来,也就是说,我们可以为不同的视图,QListView ...

  6. LeetCode(275)H-Index II

    题目 Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optimi ...

  7. LeetCode(220) Contains Duplicate III

    题目 Given an array of integers, find out whether there are two distinct indices i and j in the array ...

  8. LeetCode(154) Find Minimum in Rotated Sorted Array II

    题目 Follow up for "Find Minimum in Rotated Sorted Array": What if duplicates are allowed? W ...

  9. LeetCode(122) Best Time to Buy and Sell Stock II

    题目 Say you have an array for which the ith element is the price of a given stock on day i. Design an ...

随机推荐

  1. 基于ssh框架web示例

    基于ssh框架web示例 介绍 Spring Boot Web 开发非常简单,该示例包括包括目前web开发基本都需要用到的内容 - 序列化(json)输出 - 过滤器(filters) - 监视器(l ...

  2. react hooks 全面转换攻略(三) 全局存储解决方案

    针对 react hooks 的新版本解决方案 一.redux维持原方案 若想要无缝使用原来的 redux,和其配套的中间件 promise,thunk,saga 等等的话 可以使用 redux-re ...

  3. 阿里云CentOS7.4启动Tomcat9没有报错,端口已经开放,但是浏览器一直等待响应解决办法7

    tomcat9,启动和退出均无报错.centOS7.4防火墙已关闭,阿里云防火墙已经开放端口,telnet测试服务器的端口也通过了,**浏览器访问以后没有提示"无法访问",而是一直 ...

  4. UVA Recurrences 矩阵相乘+快速幂

    题目大意: f(n) = a1 f(n - 1) + a2 f(n - 2) + a3 f(n - 3) + ... + ad f(n - d),已给递推公式,求f(n)的大小. 解题思路: n很大, ...

  5. "HIBERNATE_SEQUENCE" does not exist问题处理

    JavaWeb应用在MySQL环境下可以正常运行,数据迁移至Oracle或者人大金仓后应用运行爆出如下错误: 严重: Servlet.service() for servlet [JeeCmsAdmi ...

  6. synchronized(5)修饰语句块之:synchronized(XXX.class)

    synchronized(XXX.class)有两种写法 synchronized(XXX.class)或者synchronized(obj.getClass()) Class也是一个类xxx.cla ...

  7. 关于jquery获取单选框value属性值为on的问题

    当取单选框的value值的时候,前提是要有value这个属性,如果没有value属性那么取出来的就会为on 取value值的常见三种方式为 $("input[name='XXX']:chec ...

  8. 微软2017年预科生计划在线编程笔试 A Legendary Items

    思路: 获得第i(i = 0, 1, ..., n - 1)件物品的概率仅由公式p / (1 << i)决定,所以获得这i件物品之间是相互独立的.迭代计算获得所有i件物品的期望再求和即可. ...

  9. ReactJS-0-React介绍

    React介绍: React是一个库而不是一个MVC框架,因为React只负责解决MVC框架中V(View)层面的问题,React致力于创建可重用的UI组件.(React is a library f ...

  10. TabLayout+ViewPager实现标签卡效果

    转载请注明原文地址:http://www.cnblogs.com/yanyojun/p/8082391.html 代码已经上传至Github:https://github.com/YanYoJun/V ...