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。