From a558ebf06eddc25cdb78708e9b5656022b7fe9fb Mon Sep 17 00:00:00 2001 From: KevenGe <1985996902@qq.com> Date: Tue, 12 Nov 2024 15:07:53 +0800 Subject: [PATCH] =?UTF-8?q?add:=20(easy)=203258.=20=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E6=BB=A1=E8=B6=B3=20K=20=E7=BA=A6=E6=9D=9F=E7=9A=84=E5=AD=90?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E6=95=B0=E9=87=8F=20I?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../problem-meta.yaml" | 5 ++++ .../solution.md" | 1 + .../solution.py" | 27 +++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 "problemset/3258. \347\273\237\350\256\241\346\273\241\350\266\263 K \347\272\246\346\235\237\347\232\204\345\255\220\345\255\227\347\254\246\344\270\262\346\225\260\351\207\217 I/problem-meta.yaml" create mode 100644 "problemset/3258. \347\273\237\350\256\241\346\273\241\350\266\263 K \347\272\246\346\235\237\347\232\204\345\255\220\345\255\227\347\254\246\344\270\262\346\225\260\351\207\217 I/solution.md" create mode 100644 "problemset/3258. \347\273\237\350\256\241\346\273\241\350\266\263 K \347\272\246\346\235\237\347\232\204\345\255\220\345\255\227\347\254\246\344\270\262\346\225\260\351\207\217 I/solution.py" diff --git "a/problemset/3258. \347\273\237\350\256\241\346\273\241\350\266\263 K \347\272\246\346\235\237\347\232\204\345\255\220\345\255\227\347\254\246\344\270\262\346\225\260\351\207\217 I/problem-meta.yaml" "b/problemset/3258. \347\273\237\350\256\241\346\273\241\350\266\263 K \347\272\246\346\235\237\347\232\204\345\255\220\345\255\227\347\254\246\344\270\262\346\225\260\351\207\217 I/problem-meta.yaml" new file mode 100644 index 0000000..d90d2e3 --- /dev/null +++ "b/problemset/3258. \347\273\237\350\256\241\346\273\241\350\266\263 K \347\272\246\346\235\237\347\232\204\345\255\220\345\255\227\347\254\246\344\270\262\346\225\260\351\207\217 I/problem-meta.yaml" @@ -0,0 +1,5 @@ +META: + ID: 3258 + TITLE_CN: 统计满足 K 约束的子字符串数量 I + HARD_LEVEL: EASY + URL: https://leetcode.cn/problems/count-substrings-that-satisfy-k-constraint-i/ diff --git "a/problemset/3258. \347\273\237\350\256\241\346\273\241\350\266\263 K \347\272\246\346\235\237\347\232\204\345\255\220\345\255\227\347\254\246\344\270\262\346\225\260\351\207\217 I/solution.md" "b/problemset/3258. \347\273\237\350\256\241\346\273\241\350\266\263 K \347\272\246\346\235\237\347\232\204\345\255\220\345\255\227\347\254\246\344\270\262\346\225\260\351\207\217 I/solution.md" new file mode 100644 index 0000000..21e4278 --- /dev/null +++ "b/problemset/3258. \347\273\237\350\256\241\346\273\241\350\266\263 K \347\272\246\346\235\237\347\232\204\345\255\220\345\255\227\347\254\246\344\270\262\346\225\260\351\207\217 I/solution.md" @@ -0,0 +1 @@ +在该问题中,考虑到`1 <= s.length <= 50`,因此即使遍历所以的**子串**也只有$2500$数量级,大概率可以直接遍历。而且,可以通过**数据预处理**或者**滑动窗口**的方式进行优化子串的计算方式。 \ No newline at end of file diff --git "a/problemset/3258. \347\273\237\350\256\241\346\273\241\350\266\263 K \347\272\246\346\235\237\347\232\204\345\255\220\345\255\227\347\254\246\344\270\262\346\225\260\351\207\217 I/solution.py" "b/problemset/3258. \347\273\237\350\256\241\346\273\241\350\266\263 K \347\272\246\346\235\237\347\232\204\345\255\220\345\255\227\347\254\246\344\270\262\346\225\260\351\207\217 I/solution.py" new file mode 100644 index 0000000..9e9f280 --- /dev/null +++ "b/problemset/3258. \347\273\237\350\256\241\346\273\241\350\266\263 K \347\272\246\346\235\237\347\232\204\345\255\220\345\255\227\347\254\246\344\270\262\346\225\260\351\207\217 I/solution.py" @@ -0,0 +1,27 @@ +class Solution: + def countKConstraintSubstrings(self, s: str, k: int) -> int: + + zero_accu = [0] * len(s) + zero_accu[0] = 1 if s[0] == "0" else 0 + for i in range(1, len(s)): + zero_accu[i] = zero_accu[i - 1] + (1 if s[i] == "0" else 0) + + one_accu = [0] * len(s) + one_accu[0] = 1 if s[0] == "1" else 0 + for i in range(1, len(s)): + one_accu[i] = one_accu[i - 1] + (1 if s[i] == "1" else 0) + + ans = 0 + for i in range(len(s)): + for j in range(i, len(s)): + if i == 0: + a = zero_accu[j] + b = one_accu[j] + else: + a = zero_accu[j] - zero_accu[i - 1] + b = one_accu[j] - one_accu[i - 1] + + if a <= k or b <= k: + ans += 1 + + return ans