Leetcode-Anagrams

Given an array of strings, return all groups of strings that are anagrams.

Note: All inputs will be in lower-case.

NOTE: the return is the list of all anagrams groups, the order does not matter, just put the words in each anagram group into the list.

Analysis:

Count the number of appearance of each char in a word, and generate a uid string like "num[0]/num[1]/....num[25]/", then use hash table to store the words that have the same uid.

Solution:

 1 public class Solution {
 2     public List<String> anagrams(String[] strs) {
 3         List<String> res = new LinkedList<String>();
 4         if (strs.length==0 || strs.length==1) return res;
 5         
 6         Map<String,List<String>> resMap = new HashMap<String,List<String>>();
 7         List<String> uidList = new ArrayList<String>(); 
 8 
 9         for (int i=0;i<strs.length;i++){
10             String uid = getUID(strs[i]);
11             if (resMap.containsKey(uid))
12                 resMap.get(uid).add(strs[i]);
13             else {
14                 List<String> list = new LinkedList<String>();
15                 list.add(strs[i]);
16                 resMap.put(uid,list);
17                 uidList.add(uid);
18             }
19         }
20 
21         for (int i=0;i<uidList.size();i++){
22             List<String> list = resMap.get(uidList.get(i));
23             if (list.size()>1) res.addAll(list);
24         }
25 
26         return res;
27     }
28 
29 
30     public String getUID(String s){
31         int[] num = new int[26];
32         Arrays.fill(num,0);
33         for (int i=0;i<s.length();i++){
34             char temp = s.charAt(i);
35             int val = temp-'a';
36             num[val]++;
37         }
38 
39         String uid = "";
40         for (int i=0;i<26;i++)
41             uid+=Integer.toString(num[i])+"/";
42 
43         return uid;
44 
45     }
46         
47 }

 

转载于:https://www.cnblogs.com/lishiblog/p/4125529.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值