Leetcode--49. 字母异味词分组

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]
说明:

所有输入均为小写字母。
不考虑答案输出的顺序。

方法一:   时间复杂度O(nk)  k是最长的字符串长度,n是字符串的数量

记录字符串中每个字母出现的次数,映射到哈希表中,如果两个字符串含有的字母相同且数量一致,则说明是一类

class Solution {
    public static List<List<String>> groupAnagrams(String[] strs) {
         List<List<String>> result = new ArrayList<List<String>>();
         boolean used[] = new boolean[strs.length];
         int i,j;
         for(i=0;i<strs.length;i++)
         {
             List<String> temp = null;
             if(used[i]!=true)  //used用来表示当前字符串是否已被添加过
             {
                 temp = new ArrayList<String>();
                 temp.add(strs[i]);
                 for(j=i+1;j<strs.length;j++)
                 {
                     if(used[j]==false&&equals(strs[i],strs[j])==true)
                     {
                         used[j] = true;
                         temp.add(strs[j]);
                     }
                 }
             }
             if(temp!=null)
             {
                 result.add(temp);
             }
         }
         return result;
        }
     public static boolean equals(String a,String b)
     {
         Map<Character,Integer> map = new HashMap<>();
         int i;
         for(i=0;i<a.length();i++)//将第一个字符串各字母的数量记录下来
         {
             if(map.containsKey(a.charAt(i)))
             {
                 map.put(a.charAt(i), map.get(a.charAt(i))+1);//如果已经有这个字母,那数量加一
             }
             else
             {
                 map.put(a.charAt(i), 1);/如果还没有这个字母,添加进去,数量置为1
             }
         }
         for(i=0;i<b.length();i++)  //比较字符串b和a含有的字母种类,数量是否一致
         {
             if(map.containsKey(b.charAt(i)))
             {
                 map.put(b.charAt(i), map.get(b.charAt(i))-1);//如果哈希表中有b的这个字母,那数量减一
             }
             else
             {
                 return false; //如果没有,说明两个就不是一类
             }
         }
         Set<Character> set = map.keySet();//最后哈希表中各值为0,说明是一类
         for(char c:set)
         {
             if (map.get(c) != 0) 
             {
                   return false;
             }
         }
        return true;
         
     }
}

方法二:

将每个字符串按照字母顺序排序,这样的话就可以把 eat,tea,ate 都映射到 aet。其他的类似。

class Solution {

    public List<List<String>> groupAnagrams(String[] strs) {

        HashMap<String, List<String>> hash = new HashMap<>();

            for (int i = 0; i < strs.length; i++) {

                char[] s_arr = strs[i].toCharArray();

                Arrays.sort(s_arr);//对当前字符串进行排序

                String key = String.valueOf(s_arr); //将排序后的字符串作为一个key

                if (hash.containsKey(key)) {

                    hash.get(key).add(strs[i]); //如果包含这个key,那添加进这个key对应的value

                } else {

                    List<String> temp = new ArrayList<String>();

                    temp.add(strs[i]);

                    hash.put(key, temp);//如果不包含,创建一个新的key,进行添加

                }

 

            }

            return new ArrayList<List<String>>(hash.values()); 

         

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Reading SBAR SDN flow-Based monitoring and Application Recognition

概要 在sdn下&#xff0c;控制平面基于网络测量的的数据控制网络&#xff0c;而细粒度的管理得益于细粒度的测量数据。针对sdn环境下的细粒度测量&#xff08;识别具体应用程序&#xff09;&#xff0c;可以实现对细粒度的流量管控。设计了识别系统SBAR&#xff0c;对数据流进行…

有关增强现实技术的过去、现在和未来的发展

来源&#xff1a;贤集网增强现实已经从科幻电影中跃升为基于科学的现实。早些时候&#xff0c;增强现实技术的使用成本很高&#xff0c;因此很少使用增强现实技术。研究人员没有机会经常尝试增强现实。但是今天&#xff0c;情况发生了变化。增强现实通过智能手机&#xff0c;个…

计算机改成服务器,旧电脑主机如何改成服务器

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器&#xff0c;帮助用户打造可靠、安全、灵活、高效的应用环境&#xff0c;确保服务持久稳定运行&#xff0c;提升运维效率三年低至5折&#xff0c;多种配置可选了解详情用户数据注…

Leetcode--438. 找到字符串中所有字母异位词

给定一个字符串 s 和一个非空字符串 p&#xff0c;找到 s 中所有是 p 的字母异位词的子串&#xff0c;返回这些子串的起始索引。 字符串只包含小写英文字母&#xff0c;并且字符串 s 和 p 的长度都不超过 20100。 说明&#xff1a; 字母异位词指字母相同&#xff0c;但排列不…

python经典一百道习题(转自奶酪博客)

无论学习哪门计算机语言&#xff0c;只要把100例中绝大部分题目都做一遍&#xff0c;就基本掌握该语言的语法了。 【程序1】 题目&#xff1a;有1、2、3、4个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f; #Filename:001.py cnt …

中国科学家团队《Cell》揭示人类大脑进化的基因组调控机制

来源&#xff1a;中国生物技术网人类大脑起源于漫长的生命进化过程&#xff0c;其最显著的改变是大脑的认知功能&#xff0c;反映在脑容量的显著扩大和脑结构的高度精细化。在人类进化过程中&#xff0c;“哪些遗传改变造就了人类大脑”是学界长期力图解决的科学问题。所有器官…

终端服务器安全层在协议流中检测到错误,终端服务器安全层在协议流中检测到错误,并已取消客户端连接...

事件类型: 错误事件来源: TermDD描述:RDP 的 "DATA ENCRYPTION" 协议组件在协议流中检测到一个错误并且中断了客户机。经过网上查找资料及分析&#xff0c;原来是注册表中的“Certificate”子键被损坏&#xff0c;才导致用户无法与终端服务进行正常通信。分析&#x…

Leetcode--347. 前k个高频元素

给定一个非空的整数数组&#xff0c;返回其中出现频率前 k 高的元素。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2] 示例 2: 输入: nums [1], k 1 输出: [1] 说明&#xff1a; 你可以假设给定的 k 总是合理的&#xff0c;且 1 ≤ k ≤ 数组中不相同的元素的个数…

Java泛型用于方法,类和接口

什么是泛型&#xff1f; 型就是数据类型参数化。就是说原本定死的数据类型像方法中的形参一样&#xff0c;数据是不确定的&#xff0c;使用的时候由人传进去&#xff0c;泛型就是这样&#xff0c;数据类型不确定了。使用的时候再确定就可以了。 泛型的特点 是JDK1.5的新特性泛型…

人机融合的科幻与现实

来源&#xff1a;《环球》杂志 发布时间&#xff1a;2017-04-24随着光机电一体化、生物工程、生化机器人的发展和系统科学的综合进步&#xff0c;计算机自主的逻辑思维将有足够的行为表现&#xff0c;进而真正脱离人类的完全控制&#xff0c;拥有自主的智能思维。几乎可以预见&…

js读取服务器上的txt文件,javascript – 每15秒读取一次文本文件的内容

您可以在函数中重复执行要执行的代码,并在setTimeout中传递该函数.setTimeout的第二个参数将以毫秒为单位.在这里使用setTimeout IMO在这里更合适,因为它将排除发送请求和接收响应所花费的时间.它将在收到响应后每5秒发送一次请求.$(document).ready(function() {function func…

Leetcode--128. 最长连续序列

给定一个未排序的整数数组&#xff0c;找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。 思路:存入map中&#xff0c;每次以当前元素为序列的第一个数字&#xff0…

Opencv级联分类器实现人脸识别

在本章中&#xff0c;我们将学习如何使用OpenCV使用系统相机捕获帧。org.opencv.videoio包的VideoCapture类包含使用相机捕获视频的类和方法。让我们一步一步学习如何捕捉帧 - 第1步&#xff1a;加载OpenCV本机库 在使用OpenCV库编写Java代码时&#xff0c;您需要做的第一步是使…

服务器的防火墙禁止了对指定通讯端口的访问,使用iptables限制访问网站指定端口...

Linux用得比较少&#xff0c;所以对iptables也不是很熟悉&#xff0c;最近部署网站&#xff0c;因为对外的80端口是通过nginx转发&#xff0c;而内部程序都是类似8080、3000之类的端口&#xff0c;不做处理的情况下&#xff0c;很可能会看到如:地址www.poorren.com、地址www.po…

RISC-V正在成为芯片世界中的Linux

来源&#xff1a;科技大本营芯片是信息技术的引擎&#xff0c;推动着人类社会的数字化、信息化与智能化。随着摩尔定律濒临终结&#xff0c;维持芯片技术创新面临挑战。开源芯片设计将是应对挑战的新思路。如今芯片设计动辄需要上亿研发费用、投入上百人&#xff0c;只有少数企…

细胞核起源于病毒?

撰文&#xff1a;Christie Wilcox来源&#xff1a;环球科学&#xff08;ID: huanqiukexue&#xff09;翻译&#xff1a;郑宸编辑&#xff1a;杨心舟细胞中&#xff0c;一个“病毒工厂”&#xff08;图中左侧大而圆的结构&#xff09;被其生产出来的新病毒颗粒&#xff08;若干小…

css3 固定,CSS3 calc()不适用于固定位置/绝对位置

编辑2&#xff1a;这是版本的Webkit浏览器(如询问意见)&#xff0c;与最新的Chrome测试版本&#xff0c;并且完全为我工作&#xff1a;http://jsfiddle.net/HvVst/1/使用-webkit-calc()而不是calc()。编辑&#xff1a;然后&#xff0c;你必须减去1px的边框到0.5em填充&#xff…

Leetcode--304. 二维区域和检索

给定一个二维矩阵&#xff0c;计算其子矩形范围内元素的总和&#xff0c;该子矩阵的左上角为 (row1, col1) &#xff0c;右下角为 (row2, col2)。 上图子矩阵左上角 (row1, col1) (2, 1) &#xff0c;右下角(row2, col2) (4, 3)&#xff0c;该子矩形内元素的总和为 8。 示例…

BZOJ4001 TJOI2015概率论(生成函数+卡特兰数)

设f(n)为n个节点的二叉树个数&#xff0c;g(n)为n个节点的二叉树的叶子数量之和。则答案为g(n)/f(n)。 显然f(n)为卡特兰数。有递推式f(n)Σf(i)f(n-i-1) (i0~n-1)。 类似地&#xff0c;左子树节点数为i时右子树有f(n-i-1)种情况&#xff0c;那么可以对左子树的叶子节点数之和计…

前沿|8种面部表情实时追踪,你的喜怒哀乐全被AI看穿了

来源&#xff1a;雷锋网与人类一样&#xff0c;AI也学会了“察言观色”有研究表明&#xff0c;人类在相似的社会环境下表达情感的面部表情几乎是相同的。如果一个人皱眉、嘟嘴、脸色涨红&#xff0c;你一定知道TA是在生气&#xff0c;现在AI同样能够“看穿”这一点。情感分析一…