[英]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.