- Leetcode 2957. Remove Adjacent Almost-Equal Characters
- 1. 解題思路
- 2. 代碼實現
- 題目鏈接:2957. Remove Adjacent Almost-Equal Characters
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, 0pre = "."for ch in word:if abs(ord(ch) - ord(pre)) <= 1:cnt += 1else:ans += cnt // 2cnt = 1pre = chans += cnt // 2return ans
提交代碼評測得到:耗時38ms,占用內存16.3MB。