博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode: Anagrams 解题报告
阅读量:5280 次
发布时间:2019-06-14

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

Anagrams

Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.

思路:

建Hashtable,用排序过的string作为key,它的anagram作为ArrayList

这道题之前用暴力写的O(N^2)的TLE了,改用Hashtable来写
题目的意思是给一个String数组,找出其中由相同字母组成的单词。
例如:
S = ["abc", "bca", "bac", "bbb", "bbca", "abcb"]
答案为:
["abc", "bca", "bac", "bbca", "abcb"]
只有"bbb"没有相同字母组成的单词。

ref: http://blog.csdn.net/fightforyourdream/article/details/14217985

1 public class Solution { 2     public List
anagrams(String[] strs) { 3 List
ret = new ArrayList
(); 4 5 if (strs == null) { 6 return ret; 7 } 8 9 HashMap
> map = new HashMap
>();10 11 int len = strs.length;12 for (int i = 0; i < len; i++) {13 String s = strs[i];14 15 // Sort the string. 16 char[] chars = s.toCharArray();17 Arrays.sort(chars);18 String strSort = new String(chars); 19 20 // Create a ArrayList for the sorted string. 21 if (!map.containsKey(strSort)) {22 map.put(strSort, new ArrayList
());23 }24 25 // Add a new string to the list of the hashmap.26 map.get(strSort).add(s);27 }28 29 // go through the map and add all the strings into the result.30 for (Map.Entry
> entry: map.entrySet()) {31 List
list = entry.getValue();32 33 // skip the entries which only have one string.34 if (list.size() == 1) {35 continue;36 }37 38 // add the strings into the list.39 ret.addAll(list);40 }41 42 return ret;43 }44 }
View Code

2015.1.3 redo:

1 public class Solution { 2     public List
anagrams(String[] strs) { 3 List
ret = new ArrayList
(); 4 if (strs == null) { 5 return ret; 6 } 7 8 HashMap
> map = new HashMap
>(); 9 for (int i = 0; i < strs.length; i++) {10 String s = strs[i];11 char[] chars = s.toCharArray();12 13 Arrays.sort(chars);14 String sSort = new String(chars);15 16 if (map.containsKey(sSort)) {17 map.get(sSort).add(s);18 } else {19 List
list = new ArrayList
();20 list.add(s);21 map.put(sSort, list);22 }23 }24 25 // Bug 1: should use map.entrySet() instead of MAP.26 for (Map.Entry
> entry: map.entrySet()) {27 List
list = entry.getValue();28 if (list.size() > 1) {29 ret.addAll(list);30 }31 }32 33 return ret;34 }35 }
View Code

 

转载于:https://www.cnblogs.com/yuzhangcmu/p/4067507.html

你可能感兴趣的文章
Dojo树使用心得
查看>>
SQL Server 存储过程 sp_helptext的不足以及解决方案
查看>>
sshd修改监听端口
查看>>
IEEE 754浮点数表示标准
查看>>
WPF入门教程系列五——Window 介绍
查看>>
.NET 复杂的 DataBinding 接受 IList 或 IListSource 作为数据源
查看>>
统一建模语言UML轻松入门之基本概念
查看>>
GPS定位基本原理浅析
查看>>
InfluxDB时序数据库应用场景
查看>>
算法Sedgewick第四版-第1章基础-008一用数组实现栈(泛型、可变大小)
查看>>
ANDROID_MARS学习笔记_S02_007_Animation第一种使用方式:代码
查看>>
面向对象的JavaScript-004
查看>>
浏览器兼容之background-size
查看>>
CentOS Linux服务器安全设置
查看>>
自助建站的特点
查看>>
面试前,三大步让你百战百胜
查看>>
腾讯云服务器探索(一)
查看>>
【原理】LVM(Logical Volume Manager)动态卷管理
查看>>
对SpringIOC、AOP的理解
查看>>
apache ftp server的简单入门(数据库验证)
查看>>