CSDN编程竞赛第五十一期之python题解


1、题目名称:贝博士发奖金

贝博士的助手艾小姐工作很辛苦,他想要时不时地给她发点奖金。于是贝博士规定:从报纸上随机取一段话,去掉所有的空格和标点,并把所有的字母替换成大写构成一个字符串。如果这个字符串中包含字母Q(贝博士最喜欢的字母)或是字母B(贝博士的首字母)的个数大于或等于A(艾小姐的首字母)的个数,就给艾小姐发奖金。

import re
str=input()
str=re.sub(r'[^a-zA-Z]','',str)
str=str.upper()
if str.count('Q')>0:
	print(1)
else:
	if str.count('B')>=str.count('A'):
		print(1)
	else:
		print(0)

思路是通过正则只保留字符串中的字母后通过upper()函数将字符串转变为只包含大写字母的字符串,然后利用count()函数根据题目条件if判断即可

2、题目名称:Ctrl+X,Ctrl+V

对于给定的一个仅由A和B组成的字符串,通过选定从某一位置开始到结束的部分并执行剪切(Ctrl+X),然后粘贴(Ctrl+V)到该字符串的开始位置,使得形成的新字符串中连续的A数量最多。

s=input()
max_len=0	# 保留最大连续A的长度
start_len=0	# 开头连续A的长度
end_len=0	# 结尾连续A的长度
cur_len=0	# 缓存长度
flag=0		# 当遇上第一个B时变为0,方便保留开头连续A的长度

for i in range(0,len(s)):
	if s[i]=='A':
		cur_len+=1
	else:
		if flag==1:
			max_len=max(max_len,cur_len)
			cur_len=0
		else:
			start_len=cur_len
			flag=1
			max_len=max(max_len,cur_len)
			cur_len=0
	if i==len(s)-1 and s[i]=='A':
		end_len=cur_len
		max_len=max(max_len,cur_len)
# 考虑全是A的特殊情况
if max_len==len(s):
	print(len(s))
else:
	if start_len+end_len>max_len:
		print(start_len+end_len)
	else:
		print(max_len)

思路是判断(当前A的最大连续长度)与(结尾连续A的长度+开头连续A的长度)的值的大小,最后考虑一下全是A的特殊情况即可。

编程小白初次尝试竞赛,代码简陋,欢迎大家评论指导。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值