难度:Medium
- 题意:问一个字符串中字符是否可以经过重排使得相邻字符均不相同,并给出一个构造方案。
- 对于如何判断是否有解:显然有结论:若某一字母的出现次数为 x,则需要有
- 关键在于有解时如何进行构造:
- 考虑按照出现次数由小到大填入字符,直接
暴力实现
- 为了应对先前填入的字符较多而在另一端 “集聚” 的情况,可以这样处理:如果上一次是从某一侧填入字符,则当前字符应从另一侧开始填入。
- 考虑按照出现次数由小到大填入字符,直接
- 时间复杂度
class Solution:
def reorganizeString(self, s: str) -> str:
buc = []
for c in range(26):
buc.append([0,c])
for c in s:
buc[ord(c)-ord('a')][0] += 1
buc.sort(key = lambda x: x[0])
tmp = ''
ans = ''
n = 0
for t, c in buc:
if t == 0:
continue
tmp = ans
ans = ''
j = 0
for i in range(t):
ans += chr(c+ord('a'))
if j < n:
ans += tmp[n - 1 - j]
j += 1
while j < n:
ans += tmp[n - 1 - j]
j += 1
n += t
for i in range(n - 1):
if ans[i] == ans[i + 1]:
ans = ''
break
return ans