zoukankan      html  css  js  c++  java
  • [Swift]LeetCode49. 字母异位词分组 | Group Anagrams

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/9907946.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    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.

    给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

    示例:

    输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
    输出:
    [
      ["ate","eat","tea"],
      ["nat","tan"],
      ["bat"]
    ]

    说明:

    • 所有输入均为小写字母。
    • 不考虑答案输出的顺序。

    68ms

     1 class Solution {
     2     func hashValue(_ str: String) -> UInt64 {
     3         var hash: UInt64 = 0
     4         for code in str.unicodeScalars {
     5             let value = code.value - 97
     6             hash += UInt64(pow(5.0, Double(value)))
     7         }
     8 
     9         return hash
    10     }
    11 
    12     func groupAnagrams(_ strs: [String]) -> [[String]] {
    13         var dic = [UInt64 : [String]]()
    14         for str in strs {
    15             let hash = hashValue(str)
    16             if let strings = dic[hash] {
    17                 dic[hash] = strings + [str]
    18             } else {
    19                 dic[hash] = [str]
    20             }
    21         }
    22         return Array(dic.values)
    23     }
    24 }

    124ms

     1 class Solution {
     2     func groupAnagrams(_ strs: [String]) -> [[String]] {
     3         var result = [String : [String]]()
     4         for item in strs {
     5             let newStr = reformateString(item)
     6             if let tempArray = result[newStr] {
     7                 var newArray = tempArray
     8                 newArray.append(item)
     9                 result[newStr] = newArray
    10             } else {
    11                 result[newStr] = [item]
    12             }
    13         }
    14         return [[String]](result.values)
    15     }
    16     
    17     func reformateString(_ str: String) -> String {
    18        return String([Character](str).sorted(by: <))
    19     }
    20 }

    132ms

     1 class Solution {
     2     func groupAnagrams(_ strs: [String]) -> [[String]] {
     3         var res = [[String]]()
     4         var dict = [String: [String]]()
     5         strs.forEach{(string) in
     6             let charArray = Array(string).sorted(){$0 < $1}
     7             let key = String(charArray)
     8             if dict[key] != nil {
     9                 dict[key]?.append(string)
    10             }else {
    11                 dict[key] = [string]
    12             }
    13         }
    14         for key in dict.keys {
    15             res.append(dict[key]!)
    16         }
    17         return res
    18     }
    19 }

    140ms

     1 class Solution {
     2     func groupAnagrams(_ strs: [String]) -> [[String]] {
     3         var map = [String: [String]]()
     4         
     5         for str in strs {
     6             let key = String(str.sorted())
     7             map[key, default: []].append(str)
     8         }
     9         
    10         return Array(map.values)
    11     }
    12 }

    148ms

     1 class Solution {
     2     func groupAnagrams(_ strs: [String]) -> [[String]] {
     3         var map: [String: [String]] = [:]
     4         for str in strs {
     5             let chars = str.sorted()
     6             let key = String(chars)
     7             if var list = map[key] {
     8                 list.append(str)
     9                 map[key] = list
    10             } else {
    11                 map[key] = [str]
    12             }
    13         }
    14         return Array(map.values)
    15     }
    16 }

    316ms

     1 class Solution {
     2     func groupAnagrams(_ strs: [String]) -> [[String]] {
     3         var groups = [String: [String]]()
     4         for str in strs {
     5             let strSorted = String(str.sorted())
     6             if groups[strSorted] == nil {
     7                 groups[strSorted] = [str]
     8             } else {
     9                 groups[strSorted]?.append(str)
    10             }
    11         }
    12         return groups.map { $1 }
    13     }
    14 }
  • 相关阅读:
    练习12
    练习11
    练习10(图片题)
    练习9(第九章习题)
    练习8(图片题)
    练习5
    练习4
    对象的赋值与比较
    静态方法
    静态变量
  • 原文地址:https://www.cnblogs.com/strengthen/p/9907946.html
Copyright © 2011-2022 走看看