Лексикографически самый маленький палиндром в питоне - PullRequest
0 голосов
/ 03 октября 2018

Я нашел этот вопрос интересным, и я хотел бы поделиться этим здесь и найти достаточно хорошие коды, характерные для py:

Учитывая строку S , содержащую символы из английских алфавитов ['a' - 'z'] и '.'в качестве специального символа (без кавычек). Напишите программу для построения лексикографически наименьшего палиндрома на , заполняющего каждый из выцветших символов ('.') строчными буквами.

Определение:

Наименьший лексикографический порядок - это отношение порядка, где строка s меньше t, учитывая, что первый символ s (s1) меньше, чемпервый символ t (t1) или, если они эквивалентны, второй символ и т. д.

Например: «aaabbb» меньше, чем «aaac», потому что хотя первые трисимволы равны, четвертый символ b меньше четвертого символа c.

Формат ввода:

Строка S

Формат вывода:

Печать лексикографически наименьшего палиндрома после заполнениякаждый '.'символ , если возможно построить. Печать -1 в противном случае.

Пример-1

Ввод: a.ba

Выход: abba

Пример-2:

Ввод: ab

Ввод: -1

Объяснение:

В примере 1 вы можете создать палиндром, заполнив '.'символ 'b'.

В примере 2 невозможно сделать строку sa палиндромом.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018
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")
0 голосов
/ 04 октября 2018

Вы не можете просто скопировать вопросы вставки из заданий 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...