📅  最后修改于: 2023-12-03 14:50:39.003000             🧑  作者: Mango
给定一个仅由数字 0-9
组成的字符串 S
,求出其中任意一个长度为 K
的连续子串可以被整除的子串个数。
输入:S = "10203", K = 1
输出:5
解释:有 5 个可被整除的子串: 1, 0, 2, 0, 3。
输入:S = "1234567890", K = 5
输出:6
解释:有 6 个可被整除的子串: 12345, 23456, 34567, 45678, 56789, 7890。
一道有点难度的题目,主要思路是通过枚举子串,将其转化为数字再判断是否能被 K 整除。
通过枚举子串,我们可以得到所有长度为 K 的连续子串。而题目中要求的是任意一个长度为 K 的连续子串可以被整除的子串个数,也就是说,每个长度为 K 的连续子串都需要被考虑到。
接着,我们将这些子串转化为数字,并计算它们的余数,然后再判断是否为 0。具体地,我们可以从高位到低位一个一个地计算出它们的数字值,并对 K 取余数,判断这个余数是否为 0。
至此,我们就完成了这道题目。
以下是 Python 代码:
def count_substrings(s: str, k: int) -> int:
"""
计算可被 K 整除的子串个数
"""
if not s or k <= 0:
return 0
count = 0
for i in range(len(s) - k + 1):
# 将子串转化为数字
num = int(s[i:i+k])
# 如果被 K 整除,则计数器加 1
if num % k == 0:
count += 1
return count