面试题-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
posted @ 2021-04-16 10:53  上海-悠悠  阅读(1595)  评论(0编辑  收藏  举报