📅  最后修改于: 2023-12-03 14:53:56.844000             🧑  作者: Mango
编写一个算法,尽量减少由上一个或下一个字母替换操作所需的次数,使一个字符串中的所有字符都相同。
例如,将字符串 "abbccc" 转换为 "cccbbb" ,上一个或下一个字母替换操作次数最少,为 2 次。
我们可以遍历字符串,统计每个字符出现的次数,然后找出出现次数最多的字符,并将其作为目标字符,然后计算需要替换的字符数量。
我们可以将目标字符左边的字符向目标字符靠近,或者将目标字符右边的字符向目标字符靠近。两种方法都可以,取次数最小的方法即可。
def min_steps_to_same_char(s: str) -> int:
char_count = [0] * 26
for c in s:
char_count[ord(c) - ord('a')] += 1
max_count = max(char_count)
target_char = chr(char_count.index(max_count) + ord('a'))
left_count = right_count = 0
left, right = 0, len(s) - 1
while left < right:
if s[left] != target_char:
left_count += 1
if s[right] != target_char:
right_count += 1
left += 1
right -= 1
return min(left_count, right_count)
代码实现了上述思路,时间复杂度为 O(n)
,其中 n
为字符串的长度。