鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖
楼主: zltzlt

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

[复制链接]
发表于 2020-2-14 16:17:24 | 显示全部楼层
本帖最后由 fan1993423 于 2020-2-14 16:52 编辑

我看大伙都在仿照塔利班的答案,或者改写,还是要自己写思路才行。我这个可能不算快,但是我完全自己想的。支持TJBEST的想法
  1. def fun331(s):
  2.     count_A,count_B=s.count('A'),s.count('B')
  3.     s_inverse=s[::-1]
  4.     index_A,index_B=s.find('A'),s_inverse.find('B')
  5.     new_s=s[index_A+1:-index_B-1]
  6.     t=len(new_s)
  7.     first=len(s)-len(new_s)-2
  8.     if len(set(new_s))==1 or not len(new_s):second=0
  9.     else:
  10.         for i in range(1,len(new_s)):
  11.             second=min(new_s[:i].count('B')+new_s[i:].count('A'),t)
  12.             t=second
  13.     return min(count_A,count_B,first+second)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-14 16:18:07 | 显示全部楼层
fan1993423 发表于 2020-2-14 16:17
我看大伙都在仿照塔利班的答案,或者改写,还是要自己写思路才行。我这个可能不算快,但是我完全自己想的。 ...

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

使用道具 举报

发表于 2020-2-14 16:25:07 | 显示全部楼层

'BBAABAABBAAAAABAABBABABABABAABBAABABAAABABBBABBABAAAABAABAABBBBBABAABABBBBAAABBBAABAABAABBBABBABBBBABABBBABAAAAAABBBAABBBBABABBBAABABABAAAABBAABAAABAABABAAAAAABAAABBAAABBAAAABBAAABAAAAABBBABBABBBAABBBBAAAAAABBBABBABABBBBBABAABAAABBAABAABBBBBBAAABAABABAAAABAABAAABABBABBAAAABBABABBABABBBBABABBBAABAAAAABAABABABBBABAAABBAAABBBBBBBABAAAABAAAABBAAAABABAABBAABBBBBBAABBBBAABABBBBBAAABBAABBBBBAAAABABAABABBAAABAAABABABBAABAABBAAAABBBBAAAAAAABBABAABBBAABABBBBBABABAAAABAAAABAABBABABBBBAABAABBAABBBAAABBABABABBAABBAAAABABBBAABAAABBABABBBABABABABBAAABBBBAABAABAAABAAABAAABBBAABAAAAAAAAABBBBBBBAABABBABBABAABBAAAABABAAABAABAABBBBBABBBBBAABBBAABAABAABAAABAABBBBABAABBABABAAAABBBAAAABBBABABABBAABAABABABABAABBABABAABBBABBABAAABBABABBAABBAAABAABAABBBAAABBBBAAABBABBABBBBABBAABBABAAAAAABBBBAABBABBBBBBABBABAAABABBBAAAAAABBBAABAAABBAABAAABBAAABAABABBABABBBAAABBAAABABBAAAAABBAABBBBABABAAAABBBABBBAAAAABBAABBBBAABBBBBBAABABBBAABBAABAAABAABBAABBABABBBBABABAAAABABBAABABAABAABAABBAABBBABABBBABAAABAABBAABBBABAABBBBBABB'+'A'*100000000
你把这个带去试试,他们的都解不出来,我的还能解出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-14 16:28:46 | 显示全部楼层
fan1993423 发表于 2020-2-14 16:25
'BBAABAABBAAAAABAABBABABABABAABBAABABAAABABBBABBABAAAABAABAABBBBBABAABABBBBAAABBBAABAABAABBBABBABB ...

那你看看这个呢

testdata.zip (14.98 KB, 下载次数: 4)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-14 16:39:31 | 显示全部楼层
zltzlt 发表于 2020-2-14 16:28
那你看看这个呢

这种我这个就算不出来了,我看能不能优化吧,所以每个算法侧重点不一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-14 16:41:11 | 显示全部楼层
zltzlt 发表于 2020-2-14 15:15
输入以下数据出错
  1. t = input()
  2. count = []       #生成一一对应的列表count,j   count存放相同字母小段个数
  3. j = []           #j存放count中每个值对应的字母
  4. j.append (t[0])
  5. x = t[0]
  6. k = 0            #每段个数
  7. c = 1            #段数
  8. for i in t:
  9.     if i != x:
  10.         x = i
  11.         f = 0
  12.     else:
  13.         f = 1
  14.     if f == 0:
  15.         j.append (i)
  16.         count.append (k)
  17.         k = 1
  18.         c += 1
  19.     else:
  20.         k += 1
  21. count.append (k)
  22. s = 0
  23. ma = 0
  24. a = 0
  25. for i in range(0,c):
  26.     if j[i] == 'A':
  27.         a += count[i]
  28.         s += count[i]
  29.     else:
  30.         s -= count[i]
  31.     ma = max(ma,s)
  32. m = a - ma
  33. print(str(m))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

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

使用道具 举报

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

使用道具 举报

发表于 2020-2-14 16:47:31 | 显示全部楼层

借鉴了楼上人的思路
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-14 16:54:47 | 显示全部楼层
稍微做了修改,不用列表添加的方式,改用了min函数,砍掉了一个if条件,不用引入re,速度会有所提高,但是对于版主给出的数据无能为力,因为是从切断点数数的方法,天然的没有他们巧方法来的快,但也算是我自己想的方法吧,不过对于某些特例我的还是很快的

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zltzlt + 1 + 1

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-2-14 16:55:47 | 显示全部楼层
fan1993423 发表于 2020-2-14 16:54
稍微做了修改,不用列表添加的方式,改用了min函数,砍掉了一个if条件,不用引入re,速度会有所提高,但是 ...

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

使用道具 举报

发表于 2020-2-18 21:13:29 | 显示全部楼层
@zltzlt 看一下3楼塔利班的答案和27楼这个人的答案。看来塔利班也中枪了啊

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
zltzlt + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2020-2-18 21:18:38 | 显示全部楼层
我在41楼也声明支持11楼TJBEST的说法,哪怕我们的思路不是很好,也许会超时,但是毕竟那是我们自己想出的思路。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-19 09:21:58 | 显示全部楼层
fan1993423 发表于 2020-2-18 21:13
@zltzlt 看一下3楼塔利班的答案和27楼这个人的答案。看来塔利班也中枪了啊

已经处理,感谢指出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 12:17:21 | 显示全部楼层
烧脑的很
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-30 16:40:46 | 显示全部楼层
  1. def fun331(x):
  2.     count = 0
  3.     while True:
  4.         for i in range(len(x)):
  5.             if x[i] == 'A':
  6.                 if i >= x.count('A'):
  7.                     count += x.count('A')
  8.                     return count
  9.                 break
  10.         for i in range(len(x)):
  11.             if x[::-1][i] == 'B':
  12.                 if i >= x.count('B'):
  13.                     count += x.count('B')
  14.                     return count
  15.                 break
  16.         for i in range(len(x)):
  17.             if x[i] == 'A':
  18.                 count += i
  19.                 x = x[i+1:]
  20.                 break
  21.         else:
  22.             return count
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-24 08:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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