R2-字符串算法
包哈希表的呀。
注意
class Solution:
def frequencySort(self, s: str) -> str:
dict=defaultdict(list)
#字符串不能直接排序,需要转换为列表["a","b","c"]
s=list(s)
for str in s:
if not dict[str]:
dict[str]=1
else:
dict[str]+=1
#降序排序
s.sort(key=lambda x:dict[x],reverse=True)
#转换回字符列表
return ''.join(s)
遇到问题,那我按照key乘value不就可以了吗。很ok的感觉。
class Solution:
def frequencySort(self, s: str) -> str:
dict=defaultdict(int)
#字符串不能直接排序,需要转换为列表["a","b","c"]
s=list(s)
ret=[]
# 统计每个字符出现的次数
for char in s:
dict[char] += 1
# 降序排序,按照次数进行输出
# 使用 sorted() 而不是 sort()
for key in sorted(dict.keys(), key=lambda x: dict[x], reverse=True):
ret.append(key * dict[key])
# 转换回字符串
return ''.join(ret)
香香。
思路也可如下:
最好是这样输出('a'*3)
另解:
class Solution:
def frequencySort(self, s: str) -> str:
# 使用 collections.Counter 来统计每个字符的出现次数
# Counter(s) 会返回一个字典,其中键是字符,值是该字符出现的次数
char_count = collections.Counter(s)
# 使用 most_common() 方法来获取一个按出现次数降序排列的字符及其计数的列表
# most_common() 默认返回所有元素,你可以传递一个参数来指定返回多少个最常见的元素
sorted_char_count = char_count.most_common()
# 使用列表推导式来创建一个新列表,其中每个元素是字符乘以其出现的次数
# 例如,如果字符 'a' 出现了 3 次,那么列表中将包含 'aaa'
char_list = [i * j for i, j in sorted_char_count]
# 使用 ''.join() 方法将列表中的所有字符串连接成一个字符串,并返回
return ''.join(char_list)
eg:
s = "tree"
solution = Solution()
print(solution.frequencySort(s)) # 输出 "eert" 或 "eetr",因为 'e' 出现 2 次,'t' 和 'r' 各出现 1 次
我靠????!!!100%???!!!
好熟悉啊python语法
听说还能用大顶堆和顶排序
ps: