package leecode;
import java.util.*;
/**
 * 49. 字母异位词分组
 *
 * 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
 *
 * 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
 *
 * @author Tang
 * @date 2021/12/16
 */
public class GroupAnagrams {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<>();
        //按字母排序
        for (String str : strs) {
            String sort = sort(str);
            List<String> list = map.getOrDefault(sort, new ArrayList<>());
            list.add(str);
            map.put(sort, list);
        }
        //排序后字符串加入到
        List<List<String>> resultList = new ArrayList<>();
        for (String key : map.keySet()) {
            resultList.add(map.get(key));
        }
        return resultList;
    }
    /**
     * ask码排序
     *
     * @param str 返回排序后的字符串
     * @return
     */
    private String sort(String str) {
        char[] chars = str.toCharArray();
        //冒泡排序 从大到小
        for(int i = 0; i < chars.length; i++) {
            char max = chars[i];
            for(int j = i; j < chars.length; j++) {
                if(max < chars[j]) {
                    chars[i] = chars[j];
                    chars[j] = max;
                    max = chars[i];
                }
            }
        }
        return Arrays.toString(chars);
    }
    public static void main(String[] args) {
    }
}