【leetcode】字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
分析:两个方法
1.对每个单词进行字典序排序,排序结果相同的自然是同一分组
时间复杂度:O(N*K*log K),K为最长单词长度
空间复杂度:O(N*K)
2.对每个单词按计数分类
可以采用map,也可以采用数组,建议利用素数的性质来使用数组进行计数
每个小写字符对应一个素数,素数相乘的结果和素数乘的先后顺序无关,所以对每个单词可以生成一个特征码,只要单词中的字符的数量和种类相同,那么生成的特征码也是一样的
时间复杂度:O(N*K)
空间复杂度:O(N)
class Solution {
public:
vector<vector<string> > groupAnagrams(vector<string>& str)
{
int mod=1000000007;
vector<vector<string> > vv;
map<long long,vector<string> > mm;
map<long long ,vector<string> >::iterator it;
int n=str.size();
if(n==0)
return vv;
int prime[]= {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103};
for(int i=0;i<n;i++)
{
long long ans=1;
int m=str[i].size();
for(int j=0;j<m;j++)
{
ans=((ans%mod)*(prime[str[i][j]-'a']))%mod;
}
mm[ans].push_back(str[i]);
}
for(it=mm.begin();it!=mm.end();it++)
{
vv.push_back(it->second);
}
return vv;
}
};
【leetcode】字母异位词分组的更多相关文章
- LeetCode:字母异位词分组【16】
LeetCode:字母异位词分组[16] 题目描述 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", &quo ...
- LeetCode 49: 字母异位词分组 Group Anagrams
LeetCode 49: 字母异位词分组 Group Anagrams 题目: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. Given an array o ...
- Java实现 LeetCode 49 字母异位词分组
49. 字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", & ...
- Leetcode 49.字母异位词分组
字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", " ...
- leetcode TOP100 字母异位词分组
字母异位词分组 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 思路: 一个map,将每个字符串字符进行记数,字符作为map的key,次数初始为零,以此来标识字 ...
- 【LeetCode】49. 字母异位词分组
49. 字母异位词分组 知识点:字符串:哈希表 题目描述 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源 ...
- C#版 - Leetcode49 - 字母异位词分组 - 题解
C#版 - Leetcode49 - 字母异位词分组 - 题解 Leetcode49.Group Anagrams 在线提交: https://leetcode.com/problems/group- ...
- LeetCode 49. 字母异位词分组(Group Anagrams)
题目描述 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "ta ...
- LeetCode(49): 字母异位词分组
Medium! 题目描述: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", ...
随机推荐
- Python中的常见特殊方法或属性—— dir方法和dict属性
一.__dir__方法 对象的__dir__()方法的作用是列出对象内部所有的属性名和方法名,该方法将会返回包含所有属性或方法名的序列. 如果程序对某个对象执行dir(obj)函数,实际上就是将该对象 ...
- Python urllib与requests、XML和HTMLParser
参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1019223241745024 Python 的内建模块urllib提供了一系列用于操作 ...
- Java生鲜电商平台-服务器部署设计与架构
Java生鲜电商平台-服务器部署设计与架构 补充说明:Java开源生鲜电商平台-服务器部署设计与架构,指的是通过服务器正式上线整个项目,进行正式的运营. 回顾整个章节,我们涉及到以下几个方面: 1. ...
- 【设计模式】Adapter
前言 Adapter设计模式,允许客户端使用接口不兼容的类. 昨天收拾一些以前的东西,发现了藏在柜子里的一条线,这条线叫做OTG.这条线的一端是micro-usb的输出口,另一端是usb的输入口.这条 ...
- [转]awsome c++
原文链接 Awesome C++ A curated list of awesome C++ (or C) frameworks, libraries, resources, and shiny th ...
- 解决Vue调用springboot接口403跨域问题
最近在做一个前后端分离的项目, 前端用的是Vue后端使用的是springboot, 在项目整合的时候发现前端调用后端接口报错403跨域请求问题 前端跨域请求已解决, 那么问题就出在后端了, 找了一些资 ...
- Redis缓存实战教程
目录 Redis缓存 使用缓存Redis解决首页并发问题 1.缓存使用的简单设计 2.Redis的整合步骤 A 将Redis整合到项目中(Redis+Spring) B 设计一个数据存储策越 3.Re ...
- Java命令行传参
目的: 在运行一个程序时候再传递给它消息,这就需要传递命令参数给main()函数实现:即main()方法可以传递数据 例: public class demo{ public static void ...
- Ubuntu 16.04/18.04 右键创建新建文件
刚刚安装完新的Ubuntu系统后不能直接右键创建新的文件,那么怎么做呢 办法: 打开终端,cd 切换到 Templates文件夹下,然后输入: sudo gedit text 这样就在Template ...
- 阿里云Web应用防火墙采用规则引擎、语义分析和深度学习引擎相结合的方式防护Web攻击
深度学习引擎最佳实践 {#concept_1113021 .concept} 阿里云Web应用防火墙采用多种Web攻击检测引擎组合的方式为您的网站提供全面防护.Web应用防火墙采用规则引擎.语义分析和 ...