如何使用Python重新排列字符串的字符,以使其相邻的字符都不相同

时间:2019-10-18 07:25:25

标签: python

为解决上述问题,我编写了以下代码:

逻辑:为字符串中的每个字符创建频率dictkey =字符,value =字符的频率)。如果任何字符的频率大于ceil(n/2),则没有解决方案。否则,在dict /

中打印最频繁的字符,然后降低其频率
import math, operator
def rearrangeString(s):
    # Fill this in.
    n = len(s)
    freqDict = {}
    for i in s:
        if i not in freqDict.keys():
            freqDict[i] = 1
        else:
            freqDict[i] += 1

    for j in list(freqDict.values()):
        if j > math.ceil(n / 2):
            return None

    return maxArrange(freqDict)[:-4]

temp = ""

def maxArrange(inp):
    global temp
    n = len(inp)
    if list(inp.values()) != [0] * n:
        resCh = max(inp.items(), key=operator.itemgetter(1))[0]
        if resCh is not None and resCh != temp:
            inp[resCh] -= 1
            # Terminates with None
            temp = resCh
            return resCh + str(maxArrange(inp))

# Driver
print(rearrangeString("abbccc"))
# cbcabc
print(rearrangeString("abbcccc"))

在第一次尝试中,使用输入abbccc,它给出正确的答案,即cbcabc,但是对于输入abbcccc失败,返回ccbcabc,但不进行处理使用temp变量,否则在使用cbcabc处理时返回c并完全跳过temp

我应该如何修改逻辑,还是有更好的方法?

0 个答案:

没有答案