鱼C论坛

 找回密码
 立即注册
查看: 9824|回复: 42

[已解决]Python:每日一题 320

[复制链接]
发表于 2020-1-31 15:06:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天的题目:


给定一串英文字母,每次可以删掉一个英文字母,求最少删多少次可以让每个字母出现的次数不同。

示例 1:

输入:"aaabbb"
输出:1
解释:因为 'a' 和 'b' 都有三个,所以删掉一个 'a' 或者一个 'b' 都可以满足题意。
示例 2:

输入:"abcd"
输出:3
解释:因为 'a'、'b'、'c'、'd' 各有一个,所以需要删掉任意三个来满足题意。


欢迎大家一起答题!
最佳答案
2020-1-31 15:57:02
  1. def func320(sz:str):
  2.     dct={}
  3.     for i in sz:
  4.         dct[i]=dct.get(i,0)+1
  5.     lst=list(dct.values())
  6.     lst.sort(reverse=True)
  7.     ret,pre=0,0xFFFFFFFF
  8.     for i in lst:
  9.         pre=max(0,min(i,pre-1))
  10.         ret+=i-pre
  11.     return ret
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-5 11:44:09 | 显示全部楼层
  1. def fun320(x):
  2.     result = 0
  3.     count_x = []
  4.     for i in set(x):
  5.         if x.count(i) not in count_x:
  6.             count_x.append(x.count(i))
  7.         else:
  8.             count_i = x.count(i)
  9.             while True:
  10.                 result += 1
  11.                 count_i -= 1
  12.                 if count_i not in count_x and count_i:
  13.                     count_x.append(count_i)
  14.                     break
  15.                 elif not count_i:
  16.                     break
  17.     return result
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-21 18:31:11 | 显示全部楼层
  1. #不重复个数字母
  2. def fun320(str):
  3.     dic = {}
  4.     for each in str:
  5.         dic[each] = str.count(each)
  6.     value_lst = []
  7.     for value in dic.values():
  8.         value_lst.append(value)
  9.     l = len(value_lst)
  10.     value_lst.sort(reverse = True)
  11.     count = 0
  12.     #print(value_lst)
  13.     for i in range(l):
  14.         if i < l-1:
  15.             if value_lst[i] <= value_lst[i+1] and value_lst[i] >= 1:
  16.                 count += value_lst[i+1]-value_lst[i]+1
  17.                 value_lst[i+1] = value_lst[i] - 1
  18.                 if value_lst[i] == 0:
  19.                     count +=value_lst[i+1]
  20.                     value_lst[i+1] = 0   
  21.     return count
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-3 12:04:39 | 显示全部楼层
  1. def Kstart(self, aString):
  2.         
  3.     counts=[]
  4.     times=0
  5.     bString= "".join(list(set(aString)))
  6.     for each in bString:
  7.         counts.append(aString.count(each))
  8.     counts.sort(reverse=True)
  9.         
  10.     i=1
  11.         
  12.     while i<len(counts):
  13.         while counts[i] in counts[:i]:
  14.             times+=1
  15.             counts[i]-=1
  16.             if counts[i]<=0:
  17.                 times+=sum(counts[i+1:])
  18.                 return times
  19.         i+=1
  20.     return times
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-1 22:54:15 | 显示全部楼层
本帖最后由 坑得飞起 于 2020-2-1 23:17 编辑

st=input()
list0, list1, list2, ans = [], [], [], 0
for i in st:
    list0+=i
list1 = list(set(list0))
for i in list1:
    list2+=[list0.count(i)]
list2.sort(reverse=True)
for i in range(1,len(list2)):
    if list2[i-1]==0 :
        ans+=list2[i]
        list2[i]=0
    elif (list2[i]>=list2[i-1])and(list2[i]!=0):
        ans+=list2[i]-(list2[i-1]-1)
        list2[i]=list2[i-1]-1
print(ans)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 16:48:48 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-1 16:47:20 | 显示全部楼层
zltzlt 发表于 2020-2-1 16:00
解答错误

输入:"abcd"
  1. def func320(s):
  2.     templist = [s.count(i) for i in set(s)]
  3.     templist.sort(reverse=True)
  4.     result, length = 0, len(templist)
  5.     for ind in range(length):
  6.         if len(set(templist)) != len(templist):
  7.             if templist[ind]:
  8.                 num = templist.count(templist[ind])
  9.                 for i in range(ind + 1, ind + num):
  10.                     templist[i] -= 1
  11.                     result += 1
  12.         else:
  13.             break
  14.     return result
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 16:19:38 | 显示全部楼层
William4869 发表于 2020-2-1 16:18
疏忽了,,这样呢

这样可以了,但是用时较长。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-1 16:18:06 | 显示全部楼层
本帖最后由 zltzlt 于 2020-2-1 16:19 编辑
zltzlt 发表于 2020-2-1 16:06
输入 'aaabbb' 出错,你自己测试下。

  1. def f320(s):
  2.     A=[]
  3.     a=set(s)
  4.     b=set()
  5.     num=1
  6.     for each in a:
  7.         A.append(s.count(each))
  8.         num+=1
  9.     A.append(0)
  10.     A.sort(reverse=True)
  11.     sum=0
  12.     for i in range(num+1):
  13.         if A[i]==0:
  14.             while i<num:
  15.                 sum+=A[i]
  16.                 i+=1
  17.             break
  18.         elif A[i+1]>=A[i]:
  19.             sum=sum+A[i+1]-A[i]+1
  20.             A[i+1]=A[i]-1
  21.     return sum
复制代码


疏忽了,,这样呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 16:06:33 | 显示全部楼层
William4869 发表于 2020-2-1 14:09
def f320(s):
    A=[]
    a=set(s)

输入 'aaabbb' 出错,你自己测试下。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 16:05:53 | 显示全部楼层

2595 ms,效率不高啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 16:04:40 | 显示全部楼层
ouyunfu 发表于 2020-1-31 23:50
str = input("请输入要统计的单词:")
def D(i):
    global count

1011 ms,效率偏低
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 16:00:47 | 显示全部楼层
546623863 发表于 2020-1-31 23:00
感觉我每次写的思路都比较奇葩。。。。

849 ms,不错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 16:00:15 | 显示全部楼层

解答错误

输入:"abcd"
输出:6
预期结果:3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 15:57:55 | 显示全部楼层
TJBEST 发表于 2020-1-31 21:16
非常朴素的做法

569 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 15:57:11 | 显示全部楼层
SHRS23 发表于 2020-1-31 19:13
请版主帮忙测试

输入大数据出错(由于字符串太长,这里我就不展示了)

IndexError: list index out of range
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 15:56:06 | 显示全部楼层
阴阳神万物主 发表于 2020-1-31 18:41
娱乐向解题,嗯,好像是。(AWA)

560 ms
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 15:55:06 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 15:54:08 | 显示全部楼层
wanting-for 发表于 2020-1-31 18:15
菜鸟与大佬的差距就是,大佬啥都考虑的清清楚楚。而我就漏这漏那,不严谨....

1012 ms,效率偏低
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-1 14:09:18 | 显示全部楼层
def f320(s):
    A=[]
    a=set(s)
    b=set()
    for each in a:
        A.append(s.count(each))
    A.append(0)
    A.sort(reverse=True)
    sum=0
    for i in range(0,26):
        if A[i]==0:
            while i<26:
                sum+=A[i]
                i+=1
            break
        elif A[i+1]>=A[i]:
            sum=sum+A[i+1]-A[i]+1
            A[i+1]=A[i]-1
    return sum

print(f320("qwertyuiopasdfghjklzxcvbnm"*100))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 21:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表