栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

字符串重排

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

字符串重排

题目描述
小红拿到了一个只由小写字母组成的字符串。她准备把这个字符串重排(只
改变字母的顺序,不改变数量)
重排后小红想让新字符串不包含任意两个相同的相邻字母。
你能帮帮她吗?
输入描述:
第一行一个正整数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))
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/993831.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号