1 class Solution:
 2     def sortString(self, s: str) -> str:
 3         n = len(s)
 4         dic = {}
 5         for i in range(n):
 6             if s[i] not in dic:
 7                 dic[s[i]] = 1
 8             else:
 9                 dic[s[i]] += 1
10         sorted_dic1 = sorted(dic.items(),key=lambda x:(x[0]))
11         sorted_dic2 = sorted(dic.items(),key=lambda x:(x[0]),reverse=True)
12         count = 0
13         result = ''
14         while count < n:
15             for d in sorted_dic1:
16                 key = d[0]
17                 if dic[key] > 0:
18                     dic[key] -= 1
19                     result += key
20                     count += 1
21             for d in sorted_dic2:
22                 key = d[0]
23                 if dic[key] > 0:
24                     dic[key] -= 1
25                     result += key
26                     count += 1
27         return result

算法思路:hash。

使用字典记录每一个字符出现的次数,对这个字典进行两次排序。

按照字符正序排序,按照字符反序排序。

进行“蛇形”循环,先遍历正序字典,每次从中取出一个字符拼接到结果字符串;再遍历反序字典,每次从中取出一个字符拼接到结果字符串。

当拼接次数为n的时候,说明所有的字符都已经拼接到结果字符串中,返回结果字符串。

posted on 2020-03-08 03:31  Sempron2800+  阅读(161)  评论(0编辑  收藏  举报