---
# System prepended metadata

title: 2516. Take K of Each Character From Left and Right
tags: [Leetcode, Sliding Window, Medium]

---

# 2516. Take K of Each Character From Left and Right
###### tags: `Leetcode` `Medium` `Sliding Window`
Link: https://leetcode.com/problems/take-k-of-each-character-from-left-and-right/description/
## 思路
Instead of taking ```k``` of each character from left and right, we take at most ```count(c)-k``` of each character from middle.
## Code
```python=
class Solution:
    def takeCharacters(self, s: str, k: int) -> int:
        limits = {c: s.count(c)-k for c in 'abc'}
        if any(limit < 0 for limit in limits.values()):
            return -1
        cnt = Counter()
        maxLen = 0
        left = 0
        for right in range(len(s)):
            cnt[s[right]] += 1
            while cnt[s[right]]>limits[s[right]]:
                cnt[s[left]] -= 1
                left += 1
            maxLen = max(maxLen, right-left+1)

        return len(s)-maxLen
```