本文已参与「新人创作礼」活动,一起开启掘金创作之路。
题目来自牛客网的华为机试题库,本题目为简单题
HJ23 删除字符串中出现次数最少的字符
描述
实现删除字符串中出现次数最少的字符,若出现次数最少的字符有多个,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出描述:
删除字符串中出现次数最少的字符后的字符串。
示例1
输入:aabcddd
输出:aaddd
s = input()
dic = {}
for i in s:
if i in dic:
dic[i] += 1
else:
dic[i] = 1
k = dic[s[0]]
for i in dic:
if dic[i] <= k:
k = dic[i]
for i in s:
if dic[i] != k:
print(i, end='')
解析
我用的是比较笨的方法,但是简单粗暴不需要动脑子,也不需要熟悉函数。
1.先把输入的字符串转化成字典的形式
2.用一个for循环找出字典里出现次数最少的次数(先把字典中s[0]的对应值作为k,然后按照字典的顺序不断的进行对比以此更新k的值,找出来最小的那个k用来删字母)
3.用for循环把字符串里出现次数为这个数值的字母删掉。
4.最后把得到的字母输出即可
简化方法:
写完之后查资料才发现其实有现成的函数可以直接用,找到字典里对应数值最小的字母不需要用for循环,可以直接取dic里的最小值可以用 k = min(dic.values())!瞬间就变得简单了速度还变快了,还是工具可以简化过程啊,还是要多练啊!