Problem
Given an array of strings, group anagrams together.
For example, given: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
Return:[
[“ate”, “eat”,”tea”],
[“nat”,”tan”],
[“bat”]
]Subscribe to see which companies asked this question
Analysis
HashMap
Collection<> values() |
---|
返回此映射所包含的值的 Collection 视图。 |
V put(K key, V value) |
---|
参数: key - 指定值将要关联的键 ;value - 指定键将要关联的值 |
Return :与 key 关联的旧值;如果 key 没有任何映射关系,则返回 null。 |
boolean containsKey(Object key) |
---|
Return :如果此映射包含对于指定键的映射关系,则返回 true。 |
Solution
java code
package _49GroupAnagrams;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
public class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String, List<String>> markedBoard = new HashMap<String, List<String>>();
for (int i = 0; i < strs.length; i++) {
char ch[] = strs[i].toCharArray();
Arrays.sort(ch);
String symbolStr = String.valueOf(ch);
if(!markedBoard.containsKey(symbolStr)){
List<String> newList = new ArrayList<String>();
newList.add(strs[i]);
markedBoard.put(symbolStr, newList);
}
else{
markedBoard.get(symbolStr).add(strs[i]);
}
}
List<List<String>> Anagrams = new ArrayList<List<String>>(markedBoard.values());
return Anagrams;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String strs[] = {"eat", "tea", "tan", "ate", "nat", "bat"};
List<List<String>> Anagrams = new Solution().groupAnagrams(strs);
for (int i = 0; i < Anagrams.size(); i++) {
for (int j = 0; j < Anagrams.get(i).size(); j++) {
System.out.print(Anagrams.get(i).get(j)+" ");
}
System.out.println();
}
}
}