哈希(2)

原题:

/**
 * Created by gouthamvidyapradhan on 10/03/2017.
 * Given an array of strings, group anagrams together.
 * <p>
 * For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"],
 * Return:
 * <p>
 * [
 * ["ate", "eat","tea"],
 * ["nat","tan"],
 * ["bat"]
 * ]
 * Note: All inputs will be in lower-case.
 */

答案:


public class GroupAnagrams {
    private int[] A = new int[256];
    private HashMap<String, List<String>> hashMap = new HashMap<>();
    private List<List<String>> result = new ArrayList<>();

    /**
     * Main method
     *
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        String[] strs = {"huh", "tit"};

        List<List<String>> result = new GroupAnagrams().groupAnagrams(strs);
        for (List<String> l : result) {
            for (String s : l)
                System.out.println(s);
            System.out.println("-----");
        }
    }

    public List<List<String>> groupAnagrams(String[] strs) {
        for (int i = 0, l = strs.length; i < l; i++) {
            Arrays.fill(A, 0);
            String s = strs[i];
            for (int j = 0, sl = s.length(); j < sl; j++)
                A[s.charAt(j)]++;

            StringBuilder sb = new StringBuilder();
            for (int k = 0; k < 256; k++) {
                if (A[k] != 0)
                    sb.append(k).append("").append(A[k]);
            }
            List<String> value = hashMap.get(sb.toString());
            if (value == null)
                value = new ArrayList<>();
            value.add(s);
            hashMap.put(sb.toString(), value);
        }

        for (String s : hashMap.keySet())
            result.add(hashMap.get(s));

        return result;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值