电信L2-重排序字符串使得字符串相邻字符不相同

题目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
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值