python词典上最小的回文

时间:2018-10-03 16:22:38

标签: string python-3.x palindrome lowercase lexicographic

我发现这个问题很有趣,我想在这里分享这个问题,并找到适合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为回文。

2 个答案:

答案 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")