如何在回文中追加和加入中心元素(当出现不止一次时)
How to append and join the center element(when occuring more than once) in a palindrome
我想根据用户输入的字符串按字典顺序制作回文
我获取输入字符串并计算每个字母表的出现次数(奇数或偶数)并将它们相应地存储在字典中。然后,我找到中心元素,并以排序的方式存储左右部分。
现在,当中心元素多次出现时,我该如何继续?
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时,
输出应该是corcroc,
但是我卡在了 orcrc。
您可以检查中心元素的多次出现,并在偶数列表中添加额外的元素:
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
排序 returns 元组列表,第三行将其转换回字典。
这是完成的代码
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)
我想根据用户输入的字符串按字典顺序制作回文
我获取输入字符串并计算每个字母表的出现次数(奇数或偶数)并将它们相应地存储在字典中。然后,我找到中心元素,并以排序的方式存储左右部分。
现在,当中心元素多次出现时,我该如何继续?
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时, 输出应该是corcroc, 但是我卡在了 orcrc。
您可以检查中心元素的多次出现,并在偶数列表中添加额外的元素:
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
排序 returns 元组列表,第三行将其转换回字典。
这是完成的代码
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)