49. Group Anagrams

来源:互联网 发布:php base64解码成图片 编辑:程序博客网 时间:2024/05/22 13:32

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();}}


0 0
原创粉丝点击