2019.5.23 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新)
这题还是有点技巧。根本上来说,只需要通过一个哈希表就可以进行分组。技巧在于如何选取哈希表的Key值。有三种方案:
1.将排序后的字符数组作为Key
2.统计字母出现次数作为key
3.用质数表示每一个字母,用字符串字母乘积作为key
另外在使用过程中需要注意String作为哈希表key值的问题(相同值的String变量哈希码可能不同)
对于charArray变量,String.valueOf()底层是new String()。
相同值不同哈希码的charArray变量依次使用Object.toString()之后hashCode()不同,依次使用String.valueOf()之后hashCode()相同。
对于StringBuildrer变量,String.valueOf()底层是Object.toString(),StringBuildrer重写的toString()底层是new String()。
相同值不同哈希码的StringBuildrer变量依次使用String.valueOf()/Object.toString()之后hashCode()相同,依次使用toString()之后hashCode()也相同。
Given an array of strings, group anagrams together.
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
import java.util.*;
/**
*
* Given an array of strings, group anagrams together.
* 给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
*
*/
public class GroupAnagrams {
//将排序后的字符数组作为key
//相同值不同哈希码的charArray变量依次使用Object.toString()之后hashCode()不同,依次使用String.valueOf()之后hashCode()相同。
public List<List<String>> groupAnagrams(String[] strs) {
HashMap