上升下降字符串(python)

1370.上升下降字符串

给你一个字符串s ,请你根据下面的算法重新构造字符串:

从s中选出最小的字符,将它接在结果字符串的后面。

从s剩余字符中选出最小的字符,且该字符比上一个添加的字符大,将它接在结果字符串后面。

重复步骤2 ,直到你没法从s中选择字符。

从s中选出最大的字符,将它接在结果字符串的后面。

从s剩余字符中选出最大的字符,且该字符比上一个添加的字符小,将它接在结果字符串后面。

重复步骤5 ,直到你没法从s中选择字符。重复步骤1到6 ,直到s中所有字符都已经被选过。

在任何一步中,如果最小或者最大字符不止一个 ,你可以选择其中任意一个,并将其添加到结果字符串。请你返回将s

中字符重新排序后的结果字符串 。

示例1:

输入:s = “aaaabbbbcccc”

输出:“abccbaabccba”

解释:第一轮的步骤1,2,3后,结果字符串为result = "abc"第一轮的步骤4,5,6后,结果字符串为result = “abccba”

第一轮结束,现在s = “aabbcc” ,我们再次回到步骤1

第二轮的步骤1,2,3后,结果字符串为result = "abccbaabc"第二轮的步骤4,5,6后,结果字符串为result = “abccbaabccba”

示例2:

输入:s = “rat”

输出:“art”

解释:单词"rat"在上述算法重排序以后变成"art"

示例3:

输入:s = “leetcode”

输出:“cdelotee”

示例4:

输入:s = “ggggggg”

输出:“ggggggg”

示例5:

输入:s = “spo”

输出:“ops”

from collections import Counter

def func(s):
    chars = Counter(s)
    ans = []
    signal = 0
    while chars:
        group = list(chars)
        group.sort(reverse=signal)
        ans.extend(group)
        chars -= Counter(group)
        signal = 1-signal
    return ''.join(ans)

print(func(s = "leetcode"))

猜你喜欢

转载自blog.csdn.net/playboygogogo/article/details/109104137