[Swift]LeetCode451. 根據字符出現頻率排序 | Sort Characters By Frequency

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-sjluagwd-ha.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

Given a string, sort it in decreasing order based on the frequency of characters.git

Example 1:github

Input:
"tree"

Output:
"eert"

Explanation:
'e' appears twice while 'r' and 't' both appear once.
So 'e' must appear before both 'r' and 't'. Therefore "eetr" is also a valid answer. 

Example 2:微信

Input:
"cccaaa"

Output:
"cccaaa"

Explanation:
Both 'c' and 'a' appear three times, so "aaaccc" is also a valid answer.
Note that "cacaca" is incorrect, as the same characters must be together. 

Example 3:app

Input:
"Aabb"

Output:
"bbAa"

Explanation:
"bbaA" is also a valid answer, but "Aabb" is incorrect.
Note that 'A' and 'a' are treated as two different characters.

給定一個字符串,請將字符串裏的字符按照出現的頻率降序排列。spa

示例 1:code

輸入:
"tree"

輸出:
"eert"

解釋:
'e'出現兩次,'r'和't'都只出現一次。
所以'e'必須出如今'r'和't'以前。此外,"eetr"也是一個有效的答案。

示例 2:htm

輸入:
"cccaaa"

輸出:
"cccaaa"

解釋:
'c'和'a'都出現三次。此外,"aaaccc"也是有效的答案。
注意"cacaca"是不正確的,由於相同的字母必須放在一塊兒。

示例 3:blog

輸入:
"Aabb"

輸出:
"bbAa"

解釋:
此外,"bbaA"也是一個有效的答案,但"Aabb"是不正確的。
注意'A'和'a'被認爲是兩種不一樣的字符。

160ms
 1 class Solution {
 2     func frequencySort(_ s: String) -> String {
 3         let a = Array(s)
 4         var dicts = [Character: Int]()
 5         
 6         for e in a {
 7             if let count = dicts[e] {
 8                 dicts[e] = count + 1
 9             } else {
10                 dicts[e] = 1
11             }
12         }
13         
14         let sortedDicts = dicts.sorted { $0.1 > $1.1 }
15         var res = ""
16         for d in sortedDicts {
17             res += String(repeating: d.key, count: d.value)
18         }
19         return res
20     }
21 }

164ms排序

 1 class Solution {
 2     func frequencySort(_ s: String) -> String {
 3             var dict = [Character: Int]()
 4     for i in s {
 5         dict[i] = (dict[i] ?? 0 ) + 1
 6     }
 7 
 8     let keys = dict.keys.sorted(by: { dict[$0]! >= dict[$1]! } )
 9     var s = ""
10     for key in keys {
11         for _ in 0..<dict[key]! {
12             s.append(key)
13         }
14     }
15     return s
16     }
17 }

184ms

 1 class Solution {
 2     func frequencySort(_ s: String) -> String {
 3         var map: [Character: Int] = [:]
 4         s.forEach { (char) in
 5             if let count = map[char] {
 6                 map[char] = count + 1
 7             } else {
 8                 map[char] = 1
 9             }
10         }
11 
12         return map.lazy.sorted(by: { $0.value > $1.value }).reduce("", { $0 + String(Array(repeating: $1.key, count: $1.value)) })
13     }
14 }

204ms

 1 class Solution {
 2     func frequencySort(_ s: String) -> String {
 3         let array = Array(s.characters)
 4         var map : [Character : Int] = [:]
 5         
 6         for i in 0..<array.count {
 7             var n = map[array[i]]
 8             n = (n ?? 0) + 1
 9             map[array[i]] = n
10         }        
11 
12         var counts = Array(map.values)
13         counts.sort()
14         var ret : [Character] = []        
15         for i in 0..<counts.count {
16             var c : Character = " "
17             let count = counts[counts.count - 1 - i]
18             let keys = Array(map.keys)
19             for key in keys {
20                 let co = map[key]
21                 if co == count {
22                     c = key
23                     break
24                 }
25             }
26             map.removeValue(forKey: c)
27             for j in 0..<count {
28                 ret.append(c)        
29             }
30         }
31         
32         return String(ret)
33     }
34 }

228ms

 1 class Solution {
 2     func frequencySort(_ s: String) -> String {
 3         var dictionary : [Character:Int] = [:]
 4         var answerArray : [Character] = []
 5         for i in s{
 6             if dictionary.keys.contains(i){
 7                 dictionary[i] = dictionary[i]! + 1
 8             } else {
 9                 dictionary[i] = 1
10             }
11         }
12         
13         let sortedKeys = dictionary.sorted{ $0.value > $1.value }
14         
15         for i in sortedKeys{
16             let (key, value) = i
17             for _ in 0..<value{
18                 answerArray.append(key)
19             }
20         }
21         
22         return String(answerArray)
23     }
24 }

260ms

 1 class Solution {
 2     func frequencySort(_ s: String) -> String {
 3         var m = [Character:Int]()
 4         for c in s {
 5             if let count = m[c] {
 6                 m[c] = count + 1
 7             } else {
 8                 m[c] = 1
 9             }
10         }
11         
12         let arr = m.sorted { (arg0, arg1) -> Bool in
13             let a0: (Character, Int) = arg1
14             let a1: (Character, Int) = arg0
15             return a0.1 < a1.1
16         }
17         
18         var carr = [Character]()
19         for tuple in arr {
20             for _ in 0 ..< tuple.value {
21                 carr.append(tuple.key)
22             }
23         }
24         
25         return String(carr)
26     }
27 }

268ms

 1 class Solution {
 2     func frequencySort(_ s: String) -> String {
 3         if s.count == 0 {
 4             return s
 5         }
 6         let chars = s.cString(using: .utf8)!
 7     
 8         var dict = Dictionary<CChar,Int>.init()
 9     
10         for c in chars {
11             if c == 0{
12                 continue
13             }
14             dict[c] = (dict[c] ?? 0) + 1
15         }
16         var result = dict.sorted { (d1,d2) -> Bool in
17             d1.value > d2.value
18         }
19         var newStr = [CChar].init()
20     
21         for (c,index) in result {
22             for i in 0 ..< index {
23                 newStr.append(c)
24             }
25         }
26         newStr.append(0)
27 
28         return String.init(utf8String: newStr) ?? ""
29     }
30 }

348ms

 1 class Solution {
 2     func frequencySort(_ s: String) -> String {
 3         var dict: [Character: Int] = [:]
 4         
 5         for char in s {
 6             dict[char] = (dict[char] ?? 0) + 1
 7         }
 8         
 9         let keys = dict.sorted { $0.value > $1.value}.map { $0.key }
10         
11         var res = ""
12         
13         for char in keys {
14             while dict[char] != 0 {
15                 res += String(char)
16                 dict[char]! -= 1
17             }
18         }
19         
20         return res
21     }
22 }

3388ms

 1 class Solution {
 2     var m:[Character:Int] = [Character:Int]()
 3     func frequencySort(_ s: String) -> String {      
 4         var arr:[Character] = [Character]()
 5         for char in s.characters
 6         {
 7             if m[char] == nil
 8             {
 9                 m[char] = 1
10             }
11             else
12             {
13                 m[char]! += 1
14             }            
15             arr.append(char)
16         }
17         arr.sort(by: sortArray)
18         return String(arr)
19     }
20     
21     func sortArray(_ a:Character,_ b:Character) -> Bool 
22     {
23         return m[a]! > m[b]! || (m[a]! == m[b]! && a < b)
24     }
25 }
相關文章
相關標籤/搜索