📅  最后修改于: 2023-12-03 14:50:47.950000             🧑  作者: Mango
给定一个非空字符串S,确定是否可以根据其中包含的字符集重复排列S,使得连续两个字符不是相同的。
2
ebcab
bcdefghijk
YES
NO
def if_rearrange_possible(s: str) -> str:
# 统计每个字符出现的数量
char_counts = dict()
for c in s:
if c in char_counts:
char_counts[c] += 1
else:
char_counts[c] = 1
# 根据数量排序
sorted_counts = sorted(char_counts.values(), reverse=True)
# 如果最多的重复次数大于字符串长度的一半,则无法重新排列形成新字符串
if sorted_counts[0] > (len(s) + 1) // 2:
return "NO"
else:
return "YES"
本题需要判断给定的字符串是否可以排列组合形成不具有相同连续字符的新字符串。解法比较简单,就是先利用dict统计每个字符出现的位置和次数,再根据每个字符重复出现的次数进行排序,最后判断最多的字符重复次数是否大于原字符串长度的一半。如果大于,则不能形成新字符串;否则,则可以重新排列形成新字符串。