49. Group Anagrams

属于hashTable

题目描述:

Given an array of strings, group anagrams together.

Example:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

Note:

  • All inputs will be in lowercase.
  • The order of your output does not matter.

思路:

用一个hashmap存储:key是字符串(元素)的字典排序,value存储的是该类似的字符串在lists中的存储位置

新来一个字符串:先查看这个字符串的字典排序是否已经在hashmap中了,如果有,说明lists中也已经存在类似的了,直接在相应list添上就好了;如果没有:说明这是第一个,就把它的字典排序存放到hashmap中,并记录这是第几个存放到lists中的,并且在lists中新添加一个list来存放

 

有一个易错点,就是“接在相应list添上就好了”,这里直接:

lists.get(weizhi).add(strs[i]);

而不能:注意这里直接在里面操作,不要再拿出来,再放进去,会出错的!!!!!!!!!

List list = lists.get(weizhi);
list.add(strs[i]);
lists.add(weizhi , list);

冒泡排序:

 

字符数组与字符串的相互转换:

 https://www.cnblogs.com/chengzilomo/p/5063881.html

方法一:直接用数组转字符串方法效果如下

 char[] c1 = new char[]{'a','d','s'};
 return = Arrays.toString(c1);

输出效果:[a, d, s]

 

方法三:推荐使用

 char[] c4 = new char[]{'a','d','s','a','d','s'};
 return new String(c4);

输出效果:adsads

本题代码:

//求字符串的字典排序
    public static String zidian(String str){
        //冒泡:从小到大
        int n = str.length();
        char[] chars = str.toCharArray();
        for(int i = 0;ichars[j+1]){
                    //交换
                    char ch = chars[j];
                    chars[j] = chars[j+1];
                    chars[j+1] = ch;
                }
            }
        }
        return Arrays.toString(chars);
    }

    public static List> groupAnagrams(String[] strs) {
        List> lists = new ArrayList>();
        Map map = new HashMap();
        int lists_count = 0;

        for(int i = 0 ;i list = lists.get(weizhi);
                //list.add(strs[i]);
                //lists.add(weizhi , list);
                //注意这里直接在里面操作,不要再拿出来,再放进去,会出错的!!!!!!!!!
            }else {
                //如果不存在的话,就加入到lists中
                List list = new ArrayList();
                list.add(strs[i]);
                lists.add(list);
                lists_count++;
                //并且把strs[i]的元素 和 在lists中的位置 存入到hashmap中
                map.put(zidian(strs[i]),lists_count-1);

            }
        }
        return lists;
    }

    public static void main(String[] args) {
        String [] strs = {"eat", "tea", "tan", "ate", "nat", "bat"};
        List> lists = groupAnagrams(strs);
        for(int i = 0 ;i

49. Group Anagrams_第1张图片

你可能感兴趣的:(数据结构,java面试,leetcode)