我发现这个问题很有趣,我想在这里分享一下,并找到相当好的代码,特定于py:
给定一个字符串 S,其中包含来自英文字母['a' - 'z']和'." 的字符作为特殊字符(不带引号(。编写一个程序,通过用小写字母填充每个褪色字符 ('.'(来构造字典顺序最小的回文结构。
定义:
最小的字典顺序是字符串 s 小于 t 的顺序关系,假设 s (s1( 的第一个字符小于 t (t1( 的第一个字符,或者如果它们 等效,第二个字符等。
例如:">aaabbb"比"aaac"小,因为虽然前三个字符 相等,第四个字符 B 小于第四个字符 C。
输入格式:
字符串 S
输出格式:
在填充每个"."字符后按字典顺序打印最小的回文结构,如果 可以建造一个。否则打印 -1。
示例-1
输入: a.ba
输出: 阿爸
示例-2:
输入: A.B
输出: -1
解释:
在示例 1中,您可以通过用"b"填充"."字符来创建回文。
在示例 2中,不可能使字符串 s 成为回文。
您不能只是从 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
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")