Leet Code 49 Group Anagrams - 变形词分组 - Java
2016-06-23 00:00
176 查看
摘要: Leet Code 49 Group Anagrams - 变形词分组 - Java
问题原始链接 https://leetcode.com/problems/anagrams
给定一个字符串数组,按变形词分组。
例如,给定 ["eat", "tea", "tan", "ate", "nat", "bat"],返回:
[
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]
注意:所有输入都是小写。
思路:扫描每个字符串,统计每个小写字母出现次数,然后以字母及其次数生成分组标识符,如果两个字符串的分组标识符相同,那么它们就属于同一分组。例如,字符串"eat",字母'e'1个,字母'a'1个,字母't'1个,生成分组标识符"a1e1t1",字符串"ate"生成的分组标识符也是"a1e1t1",所以字符串"eat"和"ate"属于同一分组。
问题原始链接 https://leetcode.com/problems/anagrams
给定一个字符串数组,按变形词分组。
例如,给定 ["eat", "tea", "tan", "ate", "nat", "bat"],返回:
[
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]
注意:所有输入都是小写。
思路:扫描每个字符串,统计每个小写字母出现次数,然后以字母及其次数生成分组标识符,如果两个字符串的分组标识符相同,那么它们就属于同一分组。例如,字符串"eat",字母'e'1个,字母'a'1个,字母't'1个,生成分组标识符"a1e1t1",字符串"ate"生成的分组标识符也是"a1e1t1",所以字符串"eat"和"ate"属于同一分组。
[code=language-java]public class Solution { public static List<List<String>> groupAnagrams(String[] strs) { List<List<String>> result = new ArrayList<List<String>>(); if (strs == null || strs.length == 0) { return result; } int[] counter = new int[26]; Map<String, List<String>> groupToStrs = new HashMap<String, List<String>>(); StringBuilder groupIdGenerator = new StringBuilder(); for (String s : strs) { count(s, counter); String groupId = genGroupId(counter, groupIdGenerator); List<String> list = groupToStrs.get(groupId); if (list == null) { list = new ArrayList<String>(); groupToStrs.put(groupId, list); } list.add(s); } result.addAll(groupToStrs.values()); return result; } private static void count(String s, int[] counter) { Arrays.fill(counter, 0); for (int i = 0; i < s.length(); i++) { counter[s.charAt(i) - 'a']++; } } private static String genGroupId(int[] counter, StringBuilder groupIdGenerator) { groupIdGenerator.setLength(0); for (int i = 0; i < counter.length; i++) { if (counter[i] > 0) { groupIdGenerator.append((char) ('a' + i)); groupIdGenerator.append(counter[i] + ""); } } return groupIdGenerator.toString(); } }
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解