(记得import java.util.HashMap及Arrays,
首先字符串若为空或者数量为零, 则返回一个空的LinkedList)
1. 把string变为char数组, 再进行排序, 之后重新合为一个string叫mark
2. 建循环, 若hashmap(map)没有mark这个key, 就建一个LinkedList或ArrayList(放字符串的), 再把此哈希值(mark, LinkedList)放入哈希表map
3. 获取(或者已有mark)此时哈希表map里mark对应的value(LinkedList), 再将此时循环的这个字符串放入此时mark对应的LinkedList里
4. 将哈希表map里所有的mark及对应的value都找出来, 若value的表里的字符串的数量大于一的那个LinkedList, 则全都放入一个新的LinkedList(answer)里
5. 将此answer返回
public class Solution { /** * @param strs: A list of strings * @return: A list of strings */ public List<String> anagrams(String[] strs) { if(strs == null) return new LinkedList<String>(); if(strs.length == 0) return new LinkedList<String>(); HashMap<String, List<String>> map = new HashMap<String, List<String>>(); for(int i = 0; i < strs.length; i++){ char[] arr = strs[i].toCharArray(); Arrays.sort(arr); String mark = new String(arr); if(!map.containsKey(mark)){ List<String> list = new LinkedList<String>(); map.put(mark, list); } List<String> l = map.get(mark); l.add(strs[i]); } List<String> answer = new LinkedList<String>(); for(String k : map.keySet()){ List<String> list = map.get(k); if(list.size() > 1){ answer.addAll(list); } } return answer; // write your code here } }
时间: 2024-10-10 07:08:08