1. 解题思路
这一题其实不是很想放上来的,因为其实真的很简单,但是我惊讶地发现当前提交的算法实现耗时都很高,都在3000ms以上,然后我这个只有38ms,就很懵逼……
我的思路一个贪婪算法,找到所有连续的almost equal的substring,他们所有的都必须要进行改变,而要改变一个长度为n的substring,所需要的最少变换次数就是 ⌊ n 2 ⌋ \lfloor \frac{n}{2} \rfloor ⌊2n⌋。由此,我们就可以直接得到答案了。
2. 代码实现
给出python代码实现如下:
class Solution:
def removeAlmostEqualCharacters(self, word: str) -> int:
ans, cnt = 0, 0
pre = "."
for ch in word:
if abs(ord(ch) - ord(pre)) <= 1:
cnt += 1
else:
ans += cnt // 2
cnt = 1
pre = ch
ans += cnt // 2
return ans
提交代码评测得到:耗时38ms,占用内存16.3MB。
本文介绍了LeetCode问题2957的解决方案,作者提出了一种使用贪婪算法,计算连续几乎相等字符子串的最少改变次数,Python代码实现仅需38ms。

被折叠的 条评论
为什么被折叠?



