为解决上述问题,我编写了以下代码:
逻辑:为字符串中的每个字符创建频率dict
(key
=字符,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
我应该如何修改逻辑,还是有更好的方法?