博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
49. Group Anagrams
阅读量:6712 次
发布时间:2019-06-25

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

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: All inputs will be in lower-case.

 

 

要用Java写的话,就是在考Java方法的熟练度。用Map来降低二次查找的复杂度,Hash原理。把每个字符串排好序,相同放一个ArrayList,不同则新开一个,Map把排序好的和每个ArrayList对应,最后ans把Map的所有Values(ArrayList)添加进去即可。

但是看到leetcode官方的题解,发现煞笔了,直接return new ArrayList(mp.values());就可以了,利用ArrayList的构造函数,所以这题很考API的运用。

import java.lang.reflect.Array;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;class Solution {    public List
> groupAnagrams(String[] strs) {// List
> ans = new ArrayList<>(); //lc里面一定要判断这个 if (strs.length == 0) return new ArrayList(); Map
> mp = new HashMap
>(); for(int i = 0; i < strs.length; i++) { char tmpArray[] = strs[i].toCharArray(); //把字符排序 Arrays.sort(tmpArray); String SortString = String.valueOf(tmpArray);// String tmpString = new String(tmpArray); if(mp.containsKey(SortString)) { mp.get(SortString).add(strs[i]); } else { List
tmpList = new ArrayList
(); tmpList.add(strs[i]); mp.put(SortString, tmpList); } } //获取所有的mp映射值动态数组// Iterator iter = mp.values().iterator();// while(iter.hasNext()) {// List
tmpList = new ArrayList
((ArrayList
)iter.next());// ans.add(tmpList);// } return new ArrayList(mp.values()); }}public class Main { public static void main(String[] args) { Solution s = new Solution(); String[] ss = {"eat", "tea", "tan", "ate", "nat", "bat"}; System.out.println(s.groupAnagrams(ss)); }}

时间复杂度的分析:

 

 外层加上排序的,这里Sort是默认为快排的平均时间复杂度了。

还有一个更秒的方法,也稍微比这个优了一点,详见:https://leetcode.com/problems/group-anagrams/solution/

 

转载于:https://www.cnblogs.com/zhangmingzhao/p/7781458.html

你可能感兴趣的文章
有关getter 和 setter的使用
查看>>
JavaScript面向对象中的Function类型个人分享
查看>>
记录一次Webpack插件优化的经历
查看>>
【跃迁之路】【505天】程序员高效学习方法论探索系列(实验阶段262-2018.06.25)...
查看>>
ubuntu16.04 搭建java 环境
查看>>
关于 try 和 finally 中的 return
查看>>
JS 1-数据类型
查看>>
(Google I/O '17) Speeding Up Your Android Gradle Builds 在本地的实践
查看>>
最大似然法与似然函数
查看>>
SAPGUI里实现自定义的语法检查
查看>>
快速创建 HTML5 Canvas 电信网络拓扑图
查看>>
JS动画之定时器详解
查看>>
利用Tomcat发布基于Maven所构建的Jersey RESTful Web Service
查看>>
PHP之string之wordwrap()函数使用
查看>>
ABAP OPEN SQL里OPEN CURSOR和SELECT的比较
查看>>
【348天】我爱刷题系列107(2018.01.19)
查看>>
四谈快速排序(含尾递归)
查看>>
WPF 下的自定义控件以及 Grid 中控件的自适应
查看>>
来一场轰轰烈烈的HTTP协议扫盲革命
查看>>
mongodb安装和配置
查看>>