python算法FBE问题

 分析在一个字符串中,F改变对总价值的影响。当F在字符串的中间时,F的改变会对前后都造成+1,-1的影响,所以中间的F的改变会让总价值不变(前为-1,后为+1)或+2(前为+1,后为+1)或-2(前为-1,后为-1)。当F为最左一个数时或最右的一个数时,F对总价值造成的影响为+1或者-1。由数学知识可知,d=1,d=2的等差数列合并为d=1的等差数列。如下图所示。(具体参考Y总)

 如果字符长度为n全部为F,价值为0~n-1,d=1。所以可能存在的价值为:最大价值-最小价值+d

n=int(input())
s=input()
l=0#左
r=n-1#右
low=0
hight=0
while s[l]=='F'and l<n-1:#左边F单独计算,直到读到B或E
    l+=1
while s[r]=='F'and r>=0:#右边F单独计算
    r-=1
s1=[]
s2=[]
for i in range(0,n):#对两个列表进行赋值
    s1.append(s[i])
    s2.append(s[i])
for i in range(l,r+1):#对l~r(包括r)的F进行改变,并得出最小的数量
    if s1[i]=='F':
        if s1[i-1]=='E':
            s1[i]='B'
        else:
            s1[i]='E'
    if s1[i-1]==s1[i] and i>0:
        low+=1
for i in range(l,r+1):#对l~r(包括r)的F进行改变,并得出最大的数量
    if s2[i]=='F':
        if s2[i-1]=='E':
            s2[i]='E'
        else:
            s2[i]='B'
    if s2[i-1]==s2[i]and i>0:
        hight+=1
end=l+n-r-1#左边F的数量与右边F的数量相加,如果等于0,说明左右两边没有F
d=2
if end:#判断左右是否存在F
    hight+=end
    d=1
if l>r:#如果字符串全部为F,则l>r
    low=0
    hight=n-1
    d=1
print(int((hight-low)/d+1))#可能存在的价值
for i in range(low,hight+d,d):#打印每一种价值
    print(i)

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值