牛客网华为练习题——删除字符串中出现次数最少的字符
题目描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
解题思路
这题很简单,于是我就写出了如下代码:
# 19/6/2
def func(s):
if len(s.encode('utf-8')) > 20: # 判断字节
return None
dic = {}
for i in range(len(s)): # 记录每个str出现的次数
if s[i] not in dic.keys():
dic[s[i]] = 1
else:
dic[s[i]] += 1
list1 = sorted(dic.items(), key=lambda x: x[1]) # 排序
str_del = []
str_del0, freq = list1.pop(0)
str_del.append(str_del0) # 求出出现的最少次数
for i in list1: # 将出现次数最少的str删掉,但是需要注意可能同时出现好几个str出现的次数一样,都是最少的
if i[1] == freq:
str_del.append(i[0])
result = ''
for i in s:
if i not in str_del:
result += i
return result
while True:
try:
s = input()
print(func(s))
except:
break
虽然通过了测试用例,但是发现了一个缺点就是空间复杂度太高,于是看了一下通过的代码,发现其中有一个比较好:
while True:
try:
strd=raw_input()
d=[]
l=[]
for i in strd: # 计算每个str对应出现的次数
d.append(strd.count(i))
m=min(d)
for i in range(len(d)):
if d[i]!=m:
l.append(strd[i]) # 剔除出现次数最少的str
k=''.join(map(str,l))
print k
except:
break
不得不感慨,自己的编程之路还很长啊!!