首页 > 试题广场 >

删除字符串中出现次数最少的字符

[编程题]删除字符串中出现次数最少的字符
  • 热度指数:370765 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
实现删除字符串中出现次数最少的字符,若出现次数最少的字符有多个,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。

数据范围:输入的字符串长度满足 ,保证输入的字符串中仅出现小写字母

输入描述:

字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。



输出描述:

删除字符串中出现次数最少的字符后的字符串。

示例1

输入

aabcddd

输出

aaddd
while True:
    try:
        s = list(input())
        s2 = list(set(s))
        s3 = list(map(lambda x: s.count(x), s2))
        for i,j in enumerate(s2):
            if s3[i] == min(s3):
                s = ''.join(s).replace(j, '')
        print(s)
    except:
        break
发表于 2021-06-14 10:26:40 回复(0)
字典解法,但是提示运行超时,有懂的吗
while True:
    try:
        a = input()
        b = {}
        cc = {}
        ee = []
        for i in a:
            b[i] = a.count(i)
        c = b.values()
        dd = min(c)
        for i in b:
            if b.get(i, None) != dd:
                # del b[i]
                cc[i] = b.get(i, None)
                ee.append(i * b.get(i, None))
        print(''.join(ee))
    except:
        pass
发表于 2021-05-12 23:18:52 回复(3)
import sys


def get_substr(s):
    dct = {}
    # 出现的字符作为key,次数作为value
    for c in s:
        dct[c] = dct.get(c, 0) + 1
    
    # 获取dct的所有value,并取最小值
    min_val = min(dct.values())
    #遍历字典,当val等于min_val时,从元素字符串中删除
    i = 0
    for key in dct:
        if dct[key] == min_val:
            i += 1
            s = s.replace(key, '')
    return s

for line in sys.stdin:
    print(get_substr(line.strip()))

发表于 2021-04-27 23:32:30 回复(1)
def cal(s):
    dic = {}
    for i in set(s):
        dic[i] = s.count(i)
    least = min(dic.items(), key=lambda x: x[1])[1]
    output = ""
    for i in s:
        if dic[i] == least:
            continue
        else:
            output += i
    print(output)
while True:
    try:
        s = input()
        cal(s)
    except:
        break
发表于 2021-04-21 09:55:10 回复(0)
def gs(str):
    a=list(set(str))
    n=len(a)
    x=[]
    for i in range(n):
        x.append(str.count(a[i]))
    zxz=min(x)
    for i in range(n):
        if x[i]==zxz:
            str=str.replace(a[i],'')
        else: str=str
    print(str)
        
while True:
    try:
        a=input()
        gs(a)
    except:
        break

发表于 2021-04-05 00:04:24 回复(0)
letters = 'abcdefghijklmnopqrstuvwxyz'
while True:
    try:
        string = input()
        b = [0] * 26
        for i in range(len(string)):
            for index in range(0, 26):
                if letters[index] == string[i]:
                    b[index] += 1
        small_letters = ''
        a = b[:]  
        a.sort()       
        for k in range(0, 26):
            if a[k] != 0:
                small = a[k]     # 会有很多字母不出现,要找到非零最小值
                break      
        for let in range(len(letters)):
            if b[let] == small:
                small_letters += letters[let]
        new_str = ''
        for ii in range(len(string)):
            if string[ii] not in small_letters:
                new_str += string[ii]
        print(new_str)
    except:
        break
发表于 2021-03-27 20:03:13 回复(0)
while True:
    try:
        str = input()
        chars = {}
        order = []
        for x in str:
            if x in chars:
                chars[x] += 1
            else:
                chars[x] = 1
                order.append(x)
        least = chars[min(chars, key=chars.get)]
        output = ''
        for x in str:
            if int(chars[x]) > least:
               output = ''.join([output, x])
        print(output)
    except EOFError:
        break

发表于 2021-03-24 23:51:09 回复(0)
import sys
while True:
    dic = {}
    try:
        string = input()
        involve = ''
        for i in string:
            if dic.get(i,0)==0:
                dic[i]=1
            else:
                dic[i]+=1
        new = sorted(dic.values())
        for i in string:
            if dic[i]>new[0]:
                involve+=i
        print(involve)
    except:
        break
发表于 2021-03-19 10:37:53 回复(0)
while True:
    try:
        src_str = input().strip()
        per_str = "".join(set(src_str))
        lis = [src_str.count(i) for i in per_str ]
        mini = min(lis)
        to_del = [per_str[j] for j in range(len(lis)) if lis[j] == mini]
        for k in to_del:
            new_str = src_str.replace(k, '')
            src_str = new_str
        print(new_str)
    except EOFError:
        break

发表于 2021-03-10 21:23:22 回复(0)
while True:
    try:
        data = str(input())
        count = {}
        for i in data:
            if i not in count:
                count[i] = 1
            else:
                count[i] += 1
        myItemsCounts = min(count.values())
        outData = data
        for key, value in count.items():
            if value == myItemsCounts:
                outData = outData.replace(key, "")
        print(outData)
    except:
        break

发表于 2021-03-06 19:58:51 回复(0)
while True:
    try:
        a,d=input(),{}
        for i in a:
            if i not in d: d[i]=1
            else: d[i]+=1
        d= {k:v for k,v in d.items() if v==min(list(d.values()))}
        for i in d: 
            a=a.replace(i,'')
        print(a)
    except:
        break
    
    
编辑于 2021-03-02 19:06:06 回复(0)
很多答案找最小个数都是跟1比较大小,这忽略了最小个数大于1的情况,不准确

while True: try:
        string = input()
        word_dict = {} for item in string: if item not in word_dict:
                word_dict[item] = 1  else:
                word_dict[item] += 1  num_list=[] for index in word_dict:
            num_list.append(word_dict[index])
        min_num = min(num_list)
        s_list = list(string) for index in range(len(s_list)-1,-1,-1): if word_dict[s_list[index]]==min_num: del s_list[index] print(''.join(s_list)) except: break

发表于 2021-01-15 18:36:10 回复(1)
不用花里胡哨的,笨拙一点的python
while True:
    try:
        s ,ct = input() ,{}
        for i in s:
            if i not in ct.keys():
                ct[i] = s.count(i)
        ct  = sorted(ct.items(),key=lambda x:x[1])
        ctmin = ct[0][1]
        for i in ct:
            if i[1] == ctmin:
                s = s.replace(i[0],'')
        print(s)
    except:
        break
编辑于 2021-01-17 23:37:45 回复(1)
while True:
    try:
        a=input()
        b=[]
        c=''
        for i in range(len(a)):
            b.append(a.count(a[i]))#计算每一个字符的出现次数
        for i in range(len(a)):
            if min(b)!=b[i]:#判断每一个字符出现次数是否最小,不是即将其添加到新的字符串
                c=c+a[i]
        print(c)      
    except:
        break
发表于 2020-12-17 16:06:08 回复(0)
from collections import defaultdict
import sys


for s in sys.stdin:
    d = defaultdict(int)
    s = s.strip()
    for c in s:
        d[c] = d[c] + 1
    mc = min(d.values())
    for k in d:
        if d[k] == mc:
            s = s.replace(k, "")
    print(s)

发表于 2020-12-14 20:36:17 回复(0)
#coding = utf-8
arry = [] 
res = []
s = input()
for i in s:
    if i in arry:
        res.append(i) #把重复的字符保存到一个列表中
    else:
        arry.append(i) #遍历字符串把其中的元素都取出来
for i in s: #再次遍历字符串,如果有重复的就输出,不重复的不输出,
    if i in res:
        print(i,end='')

感觉这个方法比较简单,我在pycharm上测试都没问题,在这不知道为什么不行

发表于 2020-11-22 23:07:24 回复(0)
两种方法
while 1:
    try:
        a=list(input())
        n=0
        b=list(set(a))
        c=[]
        for i in b:
            c.append(a.count(i))
        k=min(c)
#         while (n<len(a)):
#             if a.count(a[n])==k:
#                 del a[n]
#             else:
#                 n +=1
        d=[]
        for j in a:
            if a.count(j)>k:
                d.append(j)
        print(''.join(d))
    except:
        break
发表于 2020-11-18 16:44:13 回复(0)
while True:
    try:
        cnt = []
        str_out = ""
        str_in = input()
        for i in range(len(str_in)):
            cnt.append(str_in.count(str_in[i]))
        min_cnt = min(cnt) 
        for i in range(len(cnt)):
            if cnt[i] != min_cnt:
                str_out += str_in[i]
        print(str_out)
    except:
        break

发表于 2020-11-13 17:15:20 回复(0)
while True:
    try:
        st = input()
        letterlist = list(st)
        letterdict = {}
        for i in letterlist:
            if i not in letterdict:
                letterdict[i] = 1
            else:
                letterdict[i] += 1
        n = min(letterdict.values())
        for i in st:
            if letterdict[i] == n :
                letterlist.remove(i)
        print(''.join(letterlist))
    except:
        break
发表于 2020-10-20 14:51:07 回复(0)
Python
from collections import Counter
while True:
    try:
        s = input().strip()
        cou = Counter(s)
        minValue = min(cou.values())
        res = ''
        for i in s:
            if s.count(i) != minValue:
                res += i
        print(res)
    except:
        break


发表于 2020-08-26 15:43:14 回复(0)

问题信息

难度:
66条回答 85315浏览

热门推荐

通过挑战的用户

查看代码