leetcode——49.字母异构词分组

完成,还算顺利

public List<List<String>> groupAnagrams(String[] strs) {
        //将第一个字符串放进一个数组,之后与前面的组的第一个字符串做比较,
        // 当出现新的字符的时候,就添加一个新的数组进去,
        // 依次类推,直到遍历结束,返回结果

        //字母异位词,要求知道出现的不同字符有哪些,以及各自出现的次数,字符串长度需要相等
        // 这应该用map来存储吧,键为出现的字符,值为次数;

        //看了别人的思路,可以将字符串的字符按照字母排列顺序进行排序,相同的放置在同一组

        int len = strs.length;
        List<List<String>> list = new ArrayList<>();
        if(len == 0 ) {
            return list;
        }
        //创建一个map,用于存放排序之后的结果以及向对应的位置
        Map<String,Integer> map = new HashMap<>();
        int k = 0;
        for (String s : strs) {
            //如何对字符串按字母表的顺序进行排列?
            char[] c = s.toCharArray();
            Arrays.sort(c);
            //将字符数组拼接起来
            String str = join(c);
            if (!map.containsKey(str)) {
                map.put(str, k);
                k++;
                List<String> l = new ArrayList<>();
                l.add(s);
                list.add(l);
            } else {
                //若存在即存入相应数组,不存在则创建新的数组
                int index = map.get(str);
                list.get(index).add(s);
            }
        }
        return list;

    }

    private String join(char[] c) {
        StringBuilder sb = new StringBuilder();
        for (char value : c) {
            sb.append(value);
        }
        return sb.toString();
    }

其他答案思路相同,形式可简化。

 ——2020.7.8

我的前方是万里征途,星辰大海!!
原文地址:https://www.cnblogs.com/taoyuxin/p/13265597.html