美文网首页
Group Anagrams

Group Anagrams

作者: Ukuleler | 来源:发表于2019-10-31 16:30 被阅读0次
捕获.PNG

这道题是要将字符串数组进行归类,比如"eat","aet","tea"这种就是一类,也就是说构造相同,但是顺序不同的进行归类,那么首先就要进行遍历,针对每一个字符串都进行排序,然后根据排序后的字符串放入map中进行标记,方便后续进行归档。那么代码如下

public class groupAnagrams {
    public static List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> res = new ArrayList<>();
        Map<String, Integer> m = new HashMap<>();
        for(int i=0;i<strs.length;i++){
            String temp = reOrder(strs[i]);
            if(m.get(temp)!=null){
                List<String> l = res.get(m.get(temp));
                l.add(strs[i]);
                res.set(m.get(temp),l);
            }else {
                List<String> l = new ArrayList<>();
                l.add(strs[i]);
                res.add(l);
                m.put(temp,res.size()-1);
            }
        }
        return res;
    }

    public static String reOrder(String str){
        char[] ctr = str.toCharArray();
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<ctr.length;i++){
            for(int k=0;k<i;k++){
                if(ctr[k]>ctr[i]){
                    char temp = ctr[k];
                    ctr[k]=ctr[i];
                    ctr[i]=temp;
                }
            }
        }
        return String.valueOf(ctr);
    }

    public static void main(String[] args) {
        String[] strs = {"eat", "tea", "tan", "ate", "nat", "bat"};
        List<List<String>> res = groupAnagrams(strs);
        for(int i=0;i<res.size();i++){
            for(int k=0;k<res.get(i).size();k++){
                System.out.print(res.get(i).get(k)+",");
            }
            System.out.println();
        }
    }
}

相关文章

网友评论

      本文标题:Group Anagrams

      本文链接:https://www.haomeiwen.com/subject/hmutbctx.html