Как добавить и присоединить центральный элемент (если встречается более одного раза) в палиндроме - PullRequest
0 голосов
/ 02 апреля 2019

Я хочу сделать палиндром лексикографически из строки ввода пользователя.

Я беру строку ввода и подсчитываю вхождения каждого алфавита (нечетные или четные) и сохраняю их соответственно в словаре.Затем я нахожу центральный элемент, а также сохраняю сортировку левой и правой частей.

Теперь, как мне продолжить, когда центральный элемент имеет несколько вхождений?

from collections import Counter
even={}
odd={}
s=input()
s=list(s)
s.sort()
s=Counter(s)
for i,j in s.items():
    if j%2==0:
        even.update({i:j})
    else:
        odd.update({i:j})
print(even,odd)        

od=list(odd)   
ev=list(even)

if len(odd)==1:
    center=od[0]
elif len(odd)>1:
    print('Not Possible')
elif len(odd)==0:
    center=''

right=[]

for i,j in even.items():
    right.append(i*int(j/2))

print(right)         
left=right[::-1]
print(left)

pal=right+list(center)+left

palin=''.join(pal)
print(palin)

Например, если вход является crocorc, Output должен быть corcroc, но я застрял в orcrc.

1 Ответ

1 голос
/ 02 апреля 2019

Вы можете проверить наличие нескольких экземпляров центрального элемента и добавить дополнительные элементы в четный список:

if odd[od[0]] > 1:
    even[od[0]] = odd[od[0]] - 1

Мы делаем -1, потому что мы должны использовать один элемент в качестве центрального элемента.Теперь проблема в том, что even не будет отсортировано, поэтому вам нужно отсортировать его.

even = sorted(even.items(), key=lambda kv: kv[0])
import collections
even = collections.OrderedDict(even)

Первая строка кода выше сортирует even, которая возвращает список кортежей, а третья строка преобразует еговернуться к словарю.

Вот готовый код

from collections import Counter
even={}
odd={}
s=input()
s=list(s)
s.sort()
s=Counter(s)
for i,j in s.items():
    if j%2==0:
        even.update({i:j})
    else:
        odd.update({i:j})
print(even,odd)        

od=list(odd)   
ev=list(even)

if len(odd)==1:
    center=od[0]
elif len(odd)>1:
    print('Not Possible')
elif len(odd)==0:
    center=''

if odd[od[0]] > 1:
    even[od[0]] = odd[od[0]] - 1

right=[]

even = sorted(even.items(), key=lambda kv: kv[0])
import collections
even = collections.OrderedDict(even)

for i,j in even.items():
    right.append(i*int(j/2))

print(right)         
left=right[::-1]
print(left)

pal=right+list(center)+left

palin=''.join(pal)
print(palin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...