fan1993423
发表于 2020-2-14 16:17:24
本帖最后由 fan1993423 于 2020-2-14 16:52 编辑
我看大伙都在仿照塔利班的答案,或者改写,还是要自己写思路才行。我这个可能不算快,但是我完全自己想的。支持TJBEST的想法
def fun331(s):
count_A,count_B=s.count('A'),s.count('B')
s_inverse=s[::-1]
index_A,index_B=s.find('A'),s_inverse.find('B')
new_s=s
t=len(new_s)
first=len(s)-len(new_s)-2
if len(set(new_s))==1 or not len(new_s):second=0
else:
for i in range(1,len(new_s)):
second=min(new_s[:i].count('B')+new_s.count('A'),t)
t=second
return min(count_A,count_B,first+second)
zltzlt
发表于 2020-2-14 16:18:07
fan1993423 发表于 2020-2-14 16:17
我看大伙都在仿照塔利班的答案,或者改写,还是要自己写思路才行。我这个可能不算快,但是我完全自己想的。 ...
超时{:10_277:}
fan1993423
发表于 2020-2-14 16:25:07
zltzlt 发表于 2020-2-14 16:18
超时
'BBAABAABBAAAAABAABBABABABABAABBAABABAAABABBBABBABAAAABAABAABBBBBABAABABBBBAAABBBAABAABAABBBABBABBBBABABBBABAAAAAABBBAABBBBABABBBAABABABAAAABBAABAAABAABABAAAAAABAAABBAAABBAAAABBAAABAAAAABBBABBABBBAABBBBAAAAAABBBABBABABBBBBABAABAAABBAABAABBBBBBAAABAABABAAAABAABAAABABBABBAAAABBABABBABABBBBABABBBAABAAAAABAABABABBBABAAABBAAABBBBBBBABAAAABAAAABBAAAABABAABBAABBBBBBAABBBBAABABBBBBAAABBAABBBBBAAAABABAABABBAAABAAABABABBAABAABBAAAABBBBAAAAAAABBABAABBBAABABBBBBABABAAAABAAAABAABBABABBBBAABAABBAABBBAAABBABABABBAABBAAAABABBBAABAAABBABABBBABABABABBAAABBBBAABAABAAABAAABAAABBBAABAAAAAAAAABBBBBBBAABABBABBABAABBAAAABABAAABAABAABBBBBABBBBBAABBBAABAABAABAAABAABBBBABAABBABABAAAABBBAAAABBBABABABBAABAABABABABAABBABABAABBBABBABAAABBABABBAABBAAABAABAABBBAAABBBBAAABBABBABBBBABBAABBABAAAAAABBBBAABBABBBBBBABBABAAABABBBAAAAAABBBAABAAABBAABAAABBAAABAABABBABABBBAAABBAAABABBAAAAABBAABBBBABABAAAABBBABBBAAAAABBAABBBBAABBBBBBAABABBBAABBAABAAABAABBAABBABABBBBABABAAAABABBAABABAABAABAABBAABBBABABBBABAAABAABBAABBBABAABBBBBABB'+'A'*100000000
你把这个带去试试,他们的都解不出来{:5_97:},我的还能解出来
zltzlt
发表于 2020-2-14 16:28:46
fan1993423 发表于 2020-2-14 16:25
'BBAABAABBAAAAABAABBABABABABAABBAABABAAABABBBABBABAAAABAABAABBBBBABAABABBBBAAABBBAABAABAABBBABBABB ...
那你看看这个呢
fan1993423
发表于 2020-2-14 16:39:31
zltzlt 发表于 2020-2-14 16:28
那你看看这个呢
这种我这个就算不出来了,我看能不能优化吧,所以每个算法侧重点不一样
有理由相信
发表于 2020-2-14 16:41:11
zltzlt 发表于 2020-2-14 15:15
输入以下数据出错
t = input()
count = [] #生成一一对应的列表count,j count存放相同字母小段个数
j = [] #j存放count中每个值对应的字母
j.append (t)
x = t
k = 0 #每段个数
c = 1 #段数
for i in t:
if i != x:
x = i
f = 0
else:
f = 1
if f == 0:
j.append (i)
count.append (k)
k = 1
c += 1
else:
k += 1
count.append (k)
s = 0
ma = 0
a = 0
for i in range(0,c):
if j == 'A':
a += count
s += count
else:
s -= count
ma = max(ma,s)
m = a - ma
print(str(m))
zltzlt
发表于 2020-2-14 16:42:32
有理由相信 发表于 2020-2-14 16:41
可以了,655 ms
有理由相信
发表于 2020-2-14 16:47:31
zltzlt 发表于 2020-2-14 16:42
可以了,655 ms
借鉴了楼上人的思路
fan1993423
发表于 2020-2-14 16:54:47
稍微做了修改,不用列表添加的方式,改用了min函数,砍掉了一个if条件,不用引入re,速度会有所提高,但是对于版主给出的数据无能为力,因为是从切断点数数的方法,天然的没有他们巧方法来的快,但也算是我自己想的方法吧,不过对于某些特例我的还是很快的
zltzlt
发表于 2020-2-14 16:55:47
fan1993423 发表于 2020-2-14 16:54
稍微做了修改,不用列表添加的方式,改用了min函数,砍掉了一个if条件,不用引入re,速度会有所提高,但是 ...
嗯嗯
fan1993423
发表于 2020-2-18 21:13:29
@zltzlt 看一下3楼塔利班的答案和27楼这个人的答案。看来塔利班也中枪了啊
fan1993423
发表于 2020-2-18 21:18:38
我在41楼也声明支持11楼TJBEST的说法,哪怕我们的思路不是很好,也许会超时,但是毕竟那是我们自己想出的思路。
zltzlt
发表于 2020-2-19 09:21:58
fan1993423 发表于 2020-2-18 21:13
@zltzlt 看一下3楼塔利班的答案和27楼这个人的答案。看来塔利班也中枪了啊
已经处理,感谢指出
zp121
发表于 2020-3-1 12:17:21
烧脑的很
776667
发表于 2021-4-30 16:40:46
def fun331(x):
count = 0
while True:
for i in range(len(x)):
if x == 'A':
if i >= x.count('A'):
count += x.count('A')
return count
break
for i in range(len(x)):
if x[::-1] == 'B':
if i >= x.count('B'):
count += x.count('B')
return count
break
for i in range(len(x)):
if x == 'A':
count += i
x = x
break
else:
return count