美文网首页
767. 重构字符串(Python)

767. 重构字符串(Python)

作者: 玖月晴 | 来源:发表于2020-12-30 11:09 被阅读0次

    难度:★★★☆☆
    类型:字符串
    方法:贪心算法

    力扣链接请移步本题传送门
    更多力扣中等题的解决方案请移步力扣中等题目录

    给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。

    若可行,输出任意可行的结果。若不可行,返回空字符串。

    示例 1:

    输入: S = "aab"
    输出: "aba"

    示例 2:

    输入: S = "aaab"
    输出: ""
    注意:

    S 只包含小写字母并且长度在[1, 500]区间内。

    解答

    判断能否获得不相邻的排布是很容易的,只需要统计每个字符出现的次数,最大的次数不超过字符串全长度的一半即可满足要求,重点在于如何寻找到这样一个排布。

    我们用贪心算法来解决这个问题,将字符串及其出现次数的字典按照出现次数降序排列,命名为total,然后按照奇偶分开,从前到后逐个插空安放total中的元素即可。

    from collections import Counter
    class Solution:
        def reorganizeString(self, S: str):
            counter = Counter(S)
            if max(counter.values()) > (len(S) + 1) // 2:
                return ''
            total = ''.join(c * v for c, v in sorted(counter.items(), key=lambda x: x[1], reverse=True))
            new_string = [''] * len(S)
            for i, j in enumerate(list(range(0, len(S), 2)) + list(range(1, len(S), 2))):
                new_string[j] = total[i]
            return ''.join(new_string)
    

    如有疑问或建议,欢迎评论区留言~

    有关更多力扣中等题的python解决方案,请移步力扣中等题解析

    相关文章

      网友评论

          本文标题:767. 重构字符串(Python)

          本文链接:https://www.haomeiwen.com/subject/rjatoktx.html