49. Group Anagrams

    xiaoxiao2021-03-25  98

    Given an array of strings, group anagrams together.

    For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"],  Return:

    [ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]

    Note: All inputs will be in lower-case.

    Subscribe to see which companies asked this question.

    public class Solution { public List<List<String>> groupAnagrams(String[] strs) { List<List<String>> re = new ArrayList<List<String>>(); if (strs.length == 0) return re; String[] data = new String[strs.length]; for (int i = 0; i < strs.length; ++i) data[i] = stringSort(strs[i]) + strs[i]; Arrays.sort(data); List<String> temp = new ArrayList<String>(); int len = data[0].length(); String model = data[0].substring(0, len / 2); temp.add(data[0].substring(len / 2, len)); for (int i = 1; i < data.length; ++i) { len = data[i].length(); if (data[i].substring(0, len / 2).equals(model)) { temp.add(data[i].substring(len / 2, len)); } else { re.add(temp); temp = new ArrayList<String>(); model = data[i].substring(0, len / 2); temp.add(data[i].substring(len / 2, len)); } } re.add(temp); return re; } static String stringSort(String str) { int[] data = new int[26]; for (int i = 0; i < str.length(); ++i) data[str.charAt(i) - 'a']++; StringBuilder re = new StringBuilder(); for (int i = 0; i < 26; ++i) { if (data[i] > 0) { for (int j = 0; j < data[i]; ++j) re.append((char) ('a' + i)); } } return re.toString(); } }

    转载请注明原文地址: https://ju.6miu.com/read-20504.html

    最新回复(0)