首页 > 代码库 > [leetcode]Anagrams
[leetcode]Anagrams
Anagrams
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
编程珠玑中的一道题,书中的解法很巧妙,我就直接搬来用了,时间空间复杂度都是O(n)
算法思路:
将每一个单词初始化,记录每个字符的个数,比如aaabca,初始化为a4b1c1。(也可以用排序做初始化,但是时间复杂度略高)
互为Anagrams的单词的初始化字符串是相同的
1 public class Solution { 2 public List<String> anagrams(String[] strs) { 3 Map<String,List<String>> map = new HashMap<String,List<String>>(); 4 for(String s : strs){ 5 String init = initial(s); 6 if(map.get(init) == null){ 7 List<String> list = new ArrayList<String>(); 8 list.add(s); 9 map.put(init,list);10 }else{11 map.get(init).add(s);12 }13 }14 List<String> res = new ArrayList<String>();15 for(List<String> list : map.values()){16 if(list.size() > 1){17 res.addAll(list);18 }19 }20 return res;21 }22 private String initial(String s){23 24 int[] hash = new int[26];25 26 for(char c : s.toCharArray()){27 hash[c - ‘a‘]++;28 }29 StringBuilder sb = new StringBuilder();30 for(int i = 0; i < 26; i++){31 if(hash[i] > 0){32 sb.append((char)(‘a‘ + i ) ).append(hash[i]);33 }34 }35 return sb.toString();36 }37 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。