簡體   English   中英

LeetCode 49 組字謎

[英]LeetCode 49 Group Anagrams

我一直試圖從 leetcode 解決這個問題,它說:

給定一個字符串數組,將字謎組合在一起。 您可以按任何順序返回答案。 字謎是通過重新排列不同單詞或短語的字母而形成的單詞或短語,通常只使用所有原始字母一次。

這是我想出的解決方案:

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) 
    {
        List<List<String>> result=new ArrayList<>();
        Map<String, ArrayList<String>> map=new HashMap<>();
        for(String s: strs)
        {
            if(map.containsKey(sortAlphabetically(s))==false)
            {
                map.put(sortAlphabetically(s), new ArrayList<>());
            }
            else
            {
                map.get(sortAlphabetically(s)).add(s);
            }
        }
        for(String key:map.keySet())
        {
            result.add(map.get(key));
        }
        return result;
    }
    public String sortAlphabetically(String s)
    {
        char[] s2=s.toCharArray();
        Arrays.sort(s2);
        return new String(s2);
    }
}

但是當我嘗試運行它時,它說 output 是錯誤的。 我可以改進什么?

改變

        if(map.containsKey(sortAlphabetically(s))==false)
        {
            map.put(sortAlphabetically(s), new ArrayList<>());
        }
        else
        {
            map.get(sortAlphabetically(s)).add(s);
        }

        if (!map.containsKey(sortAlphabetically(s))) {
            map.put(sortAlphabetically(s), new ArrayList<>());
        }
        map.get(sortAlphabetically(s)).add(s);

您忘記將String添加到Map中的新密鑰List中。

PS,也許你應該只調用sortAlphabetically(s) ,並將結果存儲在一個變量中。 它將提高性能。

    String sorted = sortAlphabetically(s);
    if (!map.containsKey(sorted)) {
        map.put(sorted, new ArrayList<>());
    }
    map.get(sorted).add(s);

另請注意,此解決方案區分大小寫。 即“悲傷”不是“廣告”的字謎。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM