题目描述
小红拿到了一个只由小写字母组成的字符串。她准备把这个字符串重排(只
改变字母的顺序,不改变数量)
重排后小红想让新字符串不包含任意两个相同的相邻字母。
你能帮帮她吗?
输入描述:
第一行一个正整数n,代表字符串的长度。(1 ≤n≤105)
第二行为一个长度为n的、只由小写字母组成的字符串。
输出描述:
如果可以完成重排,请在第一-行输出一 一个“yes", 第二行输出重排后的字
符串。如果有多个正解,输出任意即可。
如果不能重排,则直接输出"no"
import numpy as np
n = int(input('整数'))
s = input('字符串')
letter, number = np.unique(list(s), return_counts=True)
dic = dict(zip(letter, number))
dic = sorted(dic.items(), key = lambda x:x[1], reverse = True)
dic = dict(dic)
letter = list(dic.keys())
number = list(dic.values())
def fun(number, letter):
result = ''
for i in range(n):
for i in letter:
result += i
k = letter.index(i)
number[k] = number[k] - 1
if number[k] == 0:
letter.pop(k)
number.pop(k)
return result
j = n % 2
if j == 0:
if max(number) > n / 2:
print('no')
else:
print('yes')
print(fun(number, letter))
else:
if max(number) > (n + 1) / 2:
print('no')
else:
print('yes')
print(fun(number, letter))



