题目3:重排序字符串
第一行输入数字N
第二行输入长度为N的一个字符串
输出:重排序(方法可以有多种,自己想,长度不能变),使得这个长度为N的字符串相邻字符不相同,如果可以实现,则第一行输出"yes",第二行输出重排序后字符。
如果不能实现,则第一行输出"no"。
#终版
N=int(input())
s=input()
s_list=list(s)
s_list.sort()#按顺序排序
s_list_1=[]#去重
s_list_1_num=[]#每个字母出现的次数
for i in s_list:
if i not in s_list_1:
s_list_1.append(i)
for i in s_list_1:
n=s_list.count(i)
s_list_1_num.append(n)
n_max=max(s_list_1_num)#重复字符出现的最大次数
if N%2==0:#偶数
n_level=int(N/2)#8个数,小于等于4都可以 aaaaabbb,abababaa,不行
if N%2!=0:#奇数数
n_level=int((N+1)/2)#9个,小于5个可以 aaaaabbbb,ababababa
s1_list=s_list[:n_level]#分段1
s2_list=s_list[n_level:]#分段2
#分段1和分段2间隔
s_list_px=[]
s_list_px2=[]
if n_max<=n_level:
print("yes")
if N%2==0:#偶数
for i in range(0,n_level):#偶数index
t=[s1_list[i],s2_list[i]]
s_list_px2.append(t)
for i in s_list_px2:
for j in range(2):
s_list_px.append(i[j])
print("".join(s_list_px))
if N%2!=0:#奇数
s2_list.append(0)#添加最后1位0
for i in range(0,n_level):#偶数index
t=[s1_list[i],s2_list[i]]
s_list_px2.append(t)
for i in s_list_px2:
for j in range(2):
s_list_px.append(i[j])
print("".join(s_list_px[:-1]))#去除最后一位 字符串可以这样写。
else:
print("no")
10 aaaaaabbbb no
11 aaeeffejjjj yes afajejejejf