【leetcode-49】Anagrams(java)

问题描述:
Given an array of strings, return all groups of strings that are anagrams.

Note: All inputs will be in lower-case.

首先,先明白什么叫anagrams,比如eat\ate\tea,这三种,字符一样,但是顺序不同,就叫anagrams。

代码如下:

     public ArrayList<String> anagrams(String[] strs) {
         //key:SortedStr value:ArrayListStr
         HashMap<String, ArrayList<String>> maps = new HashMap<String, ArrayList<String>>();
         ArrayList<String> result = new ArrayList<String>();

         char[] tmpChar;
         String tmpStr;
         ArrayList<String> tmpArrayList;
         for(int i = 0;i<strs.length;i++){
             tmpChar = strs[i].toCharArray();
             Arrays.sort(tmpChar);
             tmpStr = new String(tmpChar);

             if(maps.containsKey(tmpStr)){
                 tmpArrayList = maps.get(tmpStr);
                 tmpArrayList.add(strs[i]);
             }else {
                ArrayList<String> strings = new ArrayList<String>();
                strings.add(strs[i]);
                maps.put(tmpStr, strings);
            }
         }
         Set<String> sets = maps.keySet();

         for(String str:sets){
             if((tmpArrayList=maps.get(str)).size()>1)
                 result.addAll(tmpArrayList);
         }
         return result;
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值