题目描述
力扣第49题「字母异位词分组」要求如下:给定一个字符串数组 strs
,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
解法
解法一:排序数组分类
对每个字符串进行排序,排序后相同的字符串即为字母异位词。
时间复杂度:O(NKlogK),其中 N 是 strs
的长度,而 K 是 strs
中字符串的最大长度。排序每个字符串的复杂度是 O(KlogK),总共要排序 N 次。
空间复杂度:O(NK),排序存储在一个 map 中,需要 O(NK) 的空间。
代码示例:
import java.util.*;
public class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if (strs == null || strs.length == 0) return new ArrayList<>();
Map<String, List<String>> map =