【题目描述】
给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。
字母异位词是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
???https://leetcode.cn/problems/group-anagrams/?favorite=2cktkvj???
【示例】
import java.util.*;import java.util.stream.Collectors;// 2022-12-19class Solution { List<List<String>> res = new ArrayList<>(); public List<List<String>> groupAnagrams(String[] strs) { // “eat”,”tea”,”tan”,”ate”,”nat”,”bat” List<String> strings = Arrays.asList(strs); int[] dp = new int[strings.size()]; for (String x : strs){ List<String> list1 = fullStr(x); List<String> list = new ArrayList<>(); Set<String> set = new HashSet<>(); for (int i = 0, len = strings.size(); i < len; i++) { String tmp = strings.get(i); if (list1.contains(tmp) && dp[i] == 0){ set.add(tmp); dp[i] = 1; } } // System.out.println(“set: ” + set); for (String xx: set){ if (xx.length() != 0){ list.add(xx); } } System.out.println(list); res.add(list); } return res; } public List<String> fullStr(String x) { List<String> list = new ArrayList<>(); list.add(x.charAt(0)+””); for (int i = 1; i < x.length(); i++){ char c = x.charAt(i); List<String> list2 = new ArrayList<>(); for (String s : list){ list2.add(s+c); // eat list2.add(c+s); // tea for (int j = 1; j < s.length(); j++){ // e + t + a String tmp = s.substring(0, j) + c + s.substring(j); list2.add(tmp); } } list = list2; } // System.out.println(list); return list; }}public class Main{ public static void main(String[] args) { String[] str = {“eat”,”tea”,”tan”,”ate”,”nat”,”bat”}; new Solution().groupAnagrams(str); // 输出: 3 [1, 5], [1, 4], [1] // new Solution().fullStr(“eat”); }} 即使爬到最高的山上,一次也只能脚踏实地地迈一步。