我发现这个问题很有趣,我想在这里分享这个问题,并找到适合py的合理代码:
给出一个字符串S ,该字符串具有来自英文字母 ['a'-'z'] 和'的字符。作为特殊字符(不带引号)。 编写一个程序,通过用小写字母填充每个退色字符('。')来构建词典上最小的回文。
定义:
最小词典顺序是给定s(s1)的第一个字符小于t(t1)的第一个字符的情况下字符串s小于t的顺序关系。 等价,第二个字符,等等。
例如:“ aaabbb”小于“ aaac”,因为尽管前三个字符 等于,第四个字符b小于第四个字符c。
输入格式:
字符串S
输出格式:
在每个'填满后,按字典顺序打印最小的回文。字符(如果有) 可能构造一个。 否则打印-1。
示例1
输入: a.ba
输出: 阿巴
示例2:
输入: a.b
输出: -1
说明:
在示例1 中,您可以通过填充'创建回文。字符“ b”。
在示例2 中,不可能使字符串s为回文。
答案 0 :(得分:0)
您不能仅从NPTEL分配中复制粘贴问题并在此处询问,甚至不尝试! 无论如何,由于“代码”是您唯一关心的问题,请尝试复制并粘贴以下行:
word = input()
length = len(word)
def SmallestPalindrome(word, length):
i = 0
j = length - 1
word = list(word) #creating a list from the input word
while (i <= j):
if (word[i] == word[j] == '.'):
word[i] = word[j] = 'a'
elif word[i] != word[j]:
if (word[i] == '.'):
word[i] = word[j]
elif (word[j] == '.'):
word[j] = word[i]
else: # worst case situation when palindrome condition is not met
return -1
i = i + 1
j = j - 1
return "".join(word) # to turn the list back to a string
print(SmallestPalindrome(word, length)) #Print the output of your function
答案 1 :(得分:-1)
s=input()
s=list(s)
n=len(s)
j=n
c=0
for i in range(n):
j=j-1
if((s[i]==s[j]) and (i==j) and (s[i]=='.' and s[j]=='.')):
s[i]='a'
s[j]='a'
elif(s[i]==s[j]):
continue
elif((s[i]!=s[j]) and (i!=j) and (s[i]=='.' or s[j]=='.')):
if(s[i]!='.'):
s[j]=s[i]
else:
s[i]=s[j]
elif((i==j) and (s[i]=='.')):
s[i]=a
else:
c=c+1
break
if(c<1):
for k in s:
print(k,end="")
else:print("-1")