LeetCode 49. Anagramas de grupo 【Java】

Descripción del título

Agrupación excéntrica de letras

Código AC

/*
思路:
    不管是eat、ate还是tae等等,我们可以发现它们实际上是相同字母之间的不同排列。
    对于这样规律的字符串,我们将他们按照字母从小到大的顺序进行排列,都可以得到一个相同的字符串。
    比如说:
        ate aet
        tae aet
        eat aet
    如果字符串排序后的结果相同那么我们认为它们是同类的,用hashmap来保存这样的关系。
    理清关系之后,通过遍历map加入list集合即可得到答案。
*/
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
		HashMap<String, List<String>> map=new HashMap<>();
		for(String str:strs){
			char[] keyChar=str.toCharArray();
			Arrays.sort(keyChar);
			String key=String.valueOf(keyChar);
			List<String> stringList=new ArrayList<String>();
			if(map.containsKey(key)){
				stringList=map.get(key);
				stringList.add(str);
				map.put(key,stringList);
			}else{
				stringList.add(str);
				map.put(key,stringList);
			}
		}
		List<List<String>> res=new ArrayList<>();
		for(String key:map.keySet()){
			res.add(map.get(key));
		}
        return res;
    }
}

El código anterior también se puede simplificar de la siguiente manera:

/*
思路:
    不管是eat、ate还是tae等等,我们可以发现它们实际上是相同字母之间的不同排列。
    对于这样规律的字符串,我们将他们按照字母从小到大的顺序进行排列,都可以得到一个相同的字符串。
    比如说:
        ate aet
        tae aet
        eat aet
    如果字符串排序后的结果相同那么我们认为它们是同类的,用hashmap来保存这样的关系。
    理清关系之后,通过遍历map加入list集合即可得到答案。
*/
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
		HashMap<String, List<String>> map=new HashMap<>();
		for(String str:strs){
			char[] keyChar=str.toCharArray();
			Arrays.sort(keyChar);
			String key=String.valueOf(keyChar);
			if(!map.containsKey(key))
				map.put(key,new ArrayList<>());
			map.get(key).add(str);
		}
		return new ArrayList(map.values());
    }
}
201 artículos originales publicados · Me gusta9 · Visitantes más de 10,000

Supongo que te gusta

Origin blog.csdn.net/weixin_40992982/article/details/105495110
Recomendado
Clasificación