今天做了一下每日一练里的“简单题”:《小艺的英文名》
但是做了将近80分钟还是只有80%的数据过了
本人自己觉得没有什么问题,还请各位大佬能够帮忙看看是哪里出了问题
一起学习,一起进步!
k=int(input())
name=input()
#三个限制:回文,前k个字母每个至少出现一次,只有前k个字母
#先判断小艺的名字有奇数个还是偶数个字母
n=len(name)
letter='abcdefghijklmnopqrstuvwxyz'
letter=letter[0:k]
if n%2==0:#偶数情况
#重要的问题是如何判断用掉了几种字母
b=set()
for i in range(0,int(n/2)):
if name[i]!='?':
b.add(name[i]) #巧妙利用集合的无重性,计算出用掉字母的个数
x=0
for i in b:
x+=1 #x为用掉字母的个数
for i in b:
letter=letter.replace(i,'') #剩下的还没用的字母序列
#再数问号的个数
y=0
for i in range(0,int(n/2)):
if name[i]=='?':
y+=1
if y<k-x: #问号数量太少
print('QAQ')
if y>=k-x: #问号数量残余
s=''
p=y-k+x #可以用a填充的问号数(因为字典序)
ins=0
for i in range(0,int(n/2)):
if name[i]!='?':
s+='%s'%(name[i])
elif name[i]=='?' and p>0:
s+='a'
p-=1
elif name[i]=='?' and p==0:
#填充a完毕以后开始顺次填充剩下的字母
s+='%s'%(letter[ins])
ins+=1
s1=''.join(reversed(s))
s=s+s1
print(s)
#偶数的情况解决了以后,奇数的情况也就明朗了
else:
b=set()
for i in range(0,int(n/2)+1):
if name[i]!='?':
b.add(name[i]) #巧妙利用集合的无重性,计算出用掉字母的个数
x=0
for i in b:
x+=1 #x为用掉字母的个数
for i in b:
letter=letter.replace(i,'') #剩下的还没用的字母序列
#再数问号的个数
y=0
for i in range(0,int(n/2)+1):
if name[i]=='?':
y+=1
if y<k-x: #问号数量太少
print('QAQ')
if y>=k-x: #问号数量残余
s=''
p=y-k+x #可以用a填充的问号数(因为字典序)
ins=0
for i in range(0,int(n/2)+1):
if name[i]!='?':
s+='%s'%(name[i])
elif name[i]=='?' and p>0:
s+='a'
p-=1
elif name[i]=='?' and p==0:
#填充a完毕以后开始顺次填充剩下的字母
s+='%s'%(letter[ins])
ins+=1
s1=''.join(reversed(s))
s2=s[0:len(s)-1] #对中间略微做一点处理
s=s2+s1
print(s)