博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Group Anagrams 群组错位词
阅读量:7269 次
发布时间:2019-06-29

本文共 1422 字,大约阅读时间需要 4 分钟。

 

Given an array of strings, group anagrams together.

Example:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],Output:[  ["ate","eat","tea"],  ["nat","tan"],  ["bat"]]

Note:

  • All inputs will be in lowercase.
  • The order of your output does not matter.

 

这道题让我们群组给定字符串集中所有的错位词,所谓的错位词就是两个字符串中字母出现的次数都一样,只是位置不同,比如abc,bac, cba等它们就互为错位词,那么我们如何判断两者是否是错位词呢,我们发现如果把错位词的字符顺序重新排列,那么会得到相同的结果,所以重新排序是判断是否互为错位词的方法,由于错位词重新排序后都会得到相同的字符串,我们以此作为key,将所有错位词都保存到字符串数组中,建立key和字符串数组之间的映射,最后再存入结果res中即可,擦巾代码如下:

 

解法一:

class Solution {public:    vector
> groupAnagrams(vector
& strs) { vector
> res; unordered_map
> m; for (string str : strs) { string t = str; sort(t.begin(), t.end()); m[t].push_back(str); } for (auto a : m) { res.push_back(a.second); } return res; }};

 

下面这种解法没有用到排序,提高了运算效率,我们用一个大小为26的int数组来统计每个单词中字符出现的次数,然后将int数组转为一个唯一的字符串,跟字符串数组进行映射,这样我们就不用给字符串排序了,代码如下:

 

解法二:

class Solution {public:    vector
> groupAnagrams(vector
& strs) { vector
> res; unordered_map
> m; for (string str : strs) { vector
cnt(26, 0); string t = ""; for (char c : str) ++cnt[c - 'a']; for (int d : cnt) t += to_string(d) + "/"; m[t].push_back(str); } for (auto a : m) { res.push_back(a.second); } return res; }};

 

类似题目:

 

 

参考资料:

 

转载地址:http://vtycm.baihongyu.com/

你可能感兴趣的文章
20145237 《信息安全系统设计基础》第三周学习总结
查看>>
多线程-定时器Timer
查看>>
host
查看>>
Three.js
查看>>
关于EF的一个简单Demo
查看>>
hive-hbase性能问题
查看>>
kafka集群的搭建
查看>>
藏在正则表达式里的陷阱-----转发记录问题
查看>>
GridView控件中插入自定义删除按钮并弹出确认框
查看>>
Json Web Token 简介
查看>>
Day03 - Python 函数
查看>>
第47天 关于html
查看>>
爬虫之Scrapy框架介绍
查看>>
关于Linux的时间与时区
查看>>
等待队列(转)
查看>>
Iphone通过viewDidLoad设置拉伸图像与按钮样式
查看>>
大数乘法——2016开发实习生腾讯模拟笔试编程题
查看>>
python: list转字符串
查看>>
欧拉函数-bzoj2818-简单推导
查看>>
console.log出来的信息不一定是真的
查看>>