此题不评价,有点意思,我在次以两种语言python 和c++,用两种相反的思路写,注意细节不同。
原题链接3258. 统计满足 K 约束的子字符串数量 I - 力扣(LeetCode)
法一,c++,先统计出不符合的字符串数量
核心思路:
遍历s字符串每个字母,再
按位与运算符
作用:对整数的二进制位执行逻辑与操作
规则:同位置均为 1 时结果为 1,否则为 0
之后一段时间是符合的,之后会不符合,触发while,此时统计不符合的子字符串的数量,之后再滑窗,减左处数字,加左边下标,注意,此left下标也代表着不符合的字符串数量,初始为0,代表原本是没有不符合的字符串的,只是越大越不满足,最后用产生的总字符串数量减不符合,得到符合的数量
法二,python,直接统计符合的子字符串数量,这个有点抽象
此处,对于新人我来说有点抽象,我更建议自己以例二为例子模拟一遍,注意此处left,统计的也是不符合的子字符串的数量,但此处用的不是这个意思,他只是单纯的表示左下标的滑窗位置,之后每次滑动会产生 i - left +1 个子字符串,为什么,原本未满足while时,表示符合,此时 ans 加此会得到符合的子字符串数量,之后触发while ,会产生从此处的 i,往前不断延申的子字符串,数量也为 i - left +1,注意不要从前往后数,前面的子字符串在前一次已经统计了一次,会重复,