209
class Solution:def minSubArrayLen(self, target: int, nums: List[int]) -> int:n = len(nums)res = n + 1left = 0now = 0for i in range(n):now += nums[i]while now - nums[left] >= target:now -= nums[left]left += 1if now >= target:res = min(res, i - left + 1)if res < n + 1:return resreturn 0
2904
class Solution:def shortestBeautifulSubstring(self, s: str, k: int) -> str:left = 0res = ""n = len(s) + 2now = ""w = 0for right in range(len(s)):if s[right] == "1":w += 1if w < k:continuewhile s[left] != "1":left += 1if n > right - left + 1:now = s[left: right + 1]n = right - left + 1elif n == right - left + 1 and now > s[left: right + 1]:now = s[left: right + 1]left += 1w -= 1return now
1234
class Solution:def balancedString(self, s: str) -> int:n = len(s)res = nn = n // 4dic = defaultdict(int)for i in s:dic[i] += 1if dic["Q"] == dic["W"] == dic["E"] == dic["R"] == n:return 0left = 0for right in range(len(s)):dic[s[right]] -= 1while max(dic.values()) <= n:res = min(right - left + 1, res)dic[s[left]] += 1left += 1return res
2875
使用变长滑动窗口,并将target转化为target % sum(nums),这样就可以大大减少循环次数,如果不做处理就会超时。
class Solution:def minSizeSubarray(self, nums: List[int], target: int) -> int:n = len(nums)a = sum(nums)p = target // am = 2 * nleft = 0res = infnow = 0target = target % afor right in range(m):now += nums[right % n]while now > target:now -= nums[left % n]left += 1if now == target:res = min(res, right - left + 1)if res < inf:return res + p * nelse:return -1