鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

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

[复制链接]
发表于 2020-1-31 23:50:52 | 显示全部楼层
str = input("请输入要统计的单词:")
def D(i):
    global count
    if i not in L1:
        L1.append(i)
    elif i-1!=0 and i-1 not in L1:
        L1.append(i-1)
        count=count+1
    elif i-1==0:
        count=count+1
    else:
        count=count+1
        return D(i-1)
    return L1, count

res = {}
for i in str:
    if i in res:
        res[i] = res[i] + 1
    else:
        res[i] = 1
L=list(res.values())
L1=[]
count=0
for i in L:
    if i not in L1:
        L1.append(i)
    elif i-1!=0 and i-1 not in L1:
        L1.append(i-1)
        count+=1
    elif i-1==0:
        count+=1
    else:
        count+=1
        D(i-1)
print(count)  

评分

参与人数 1荣誉 +4 鱼币 +4 收起 理由
zltzlt + 4 + 4 没有评分机会了

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-1 00:28:31 | 显示全部楼层
str = input("请输入要统计的单词:")
def D(i):
    global count
    if i not in L1:
        L1.append(i)
    elif i-1!=0 and i-1 not in L1:
        L1.append(i-1)
        count=count+1
    elif i-1==0:
        count=count+1
    else:
        count=count+1
        return D(i-1)
    return L1, count

res = {}
for i in str:
    if i in res:
        res[i] = res[i] + 1
    else:
        res[i] = 1
L=list(res.values())
L1=[]
count=0
for i in L:
    if i not in L1:
        L1.append(i)
    elif i-1!=0 and i-1 not in L1:
        L1.append(i-1)
        count+=1
    elif i-1==0:
        count+=1
    else:
        count+=1
        D(i-1)
print(count)  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-1 08:54:14 | 显示全部楼层

这就是缘分呐。卍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-1 11:52:12 | 显示全部楼层
本帖最后由 kinkon 于 2020-2-1 12:51 编辑
  1. def f320(n):
  2.     d={}
  3.     for i in n:
  4.         d[i]=n.count(i)
  5.     l=sorted(list(d.values()),reverse=True)
  6.     if len(l)<=1:return 0
  7.     k=0
  8.     for j in range(len(l)-1):
  9.         while l[j+1]>=l[j]:
  10.             l[j+1]-=1
  11.             k+=1
  12.             if l[j]==0:break
  13.     print(l)
  14.     return k
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

1012 ms,效率偏低
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 15:55:06 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

560 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

IndexError: list index out of range
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

569 ms
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

解答错误

输入:"abcd"
输出:6
预期结果:3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

849 ms,不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

1011 ms,效率偏低
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

2595 ms,效率不高啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

输入 'aaabbb' 出错,你自己测试下。
想知道小甲鱼最近在做啥?请访问 -> 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
复制代码


疏忽了,,这样呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这样可以了,但是用时较长。
想知道小甲鱼最近在做啥?请访问 -> 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
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-1 16:48:48 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> 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
        list2=0
    elif (list2>=list2[i-1])and(list2!=0):
        ans+=list2-(list2[i-1]-1)
        list2=list2[i-1]-1
print(ans)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 15:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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