面试题-python3 实现删除字符串中出现次数最少的字符
题目
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。
输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出描述:
删除字符串中出现次数最少的字符后的字符串。
输入例子:
abcdd
输出例子:
dd
解决代码
普通点的解决思路,先分别统计每个字符出现的次数,再得到最小的次数,下一步遍历删除字符里面次数最少的,可以用replace()方法替换。
"""
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。
输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
"""
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
a = "abcdd"
# 先分别统计每个元素出现的次数
d = {}
for i in a:
if i not in d.keys():
d[i] = 1
else:
d[i] += 1
print(d)
# 再次遍历去掉次数最少的
for j in d.keys():
# 判断等于最小的次数 min(d.values())
if d[j] == min(d.values()):
a = a.replace(j, '')
print(a)
如果全部用内置函数,可以先用min函数得到最少次数的字符,根据此字符就能得到最小的次数,字符串过滤用filter函数实现
# 首先找到出现最少次数的字符
min_str = min(a, key=lambda x: a.count(x))
# 根据这个字符得到次数
n = a.count(min_str)
# 再根据 filter 函数筛选
print("".join(filter(lambda x:a.count(x)>n, a)))
多组输入
题目描述:
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
注意每个输入文件有多组输入,即多个字符串用回车隔开
输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出描述:
删除字符串中出现次数最少的字符后的字符串。
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
aa = []
n = 3
while n > 0:
a = input("")
aa.append(a)
n -= 1
for j in aa:
min_str = min(j, key=lambda x: j.count(x))
# 根据这个字符得到次数
n = j.count(min_str)
# 再根据 filter 函数筛选
print("".join(filter(lambda x:j.count(x)>n, j)))
运行结果
aabcd
abcabcf
fbasdfsa
aa
abcabc
fasfsa