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
页: 1 2 [3]
查看完整版本: Python:每日一题 331