解題思路
首先,要找到「valid substring」的條件是:
substring length - max frequency letter count in substring <= k
因為最常出現的肯定是主體,剩下不常見的是要被替換的,那這些被替換的字母數量一定要小於題目規定的數字 k。
接著 substring 又是怎麼產生的?概念是 sliding window,所以就會有 left 跟 right pointer。
每次更新完 sliding window 中字母出現次數,都看該 sliding window 是 valid 的嗎?如果是,那就把 right 往右移,以及看看 ans 有無變化;如果不是,那就要把 left 往右移,以及把 count 也更新。
程式碼
class Solution { public: int characterReplacement(string s, int k) { int count[26] = {0}, left = 0, right = 0, maxF = 0; int ans = 0; while(right < s.size()) { count[s[right] - 'A']++; maxF = max(maxF, count[s[right] - 'A']); if((right - left + 1) - maxF > k) { count[s[left] - 'A']--; left++; } ans = max(ans, right - left + 1); right++; } return ans; } };
沒有留言:
張貼留言