检查所有长度为K的二进制子串
约 316 字大约 1 分钟
2025-01-05
检查所有长度为K的二进制子串
给你一个二进制字符串s
和一个整数k
。如果所有长度为k
的二进制字符串都是s
的子串,请返回true
,否则请返回false
。
示例 1:
输入:s = "00110110", k = 2
输出:true
解释:长度为 2 的二进制串包括 "00","01","10" 和 "11"。它们分别是 s 中下标为 0,1,3,2 开始的长度为 2 的子串。
示例 2:
输入:s = "0110", k = 1
输出:true
解释:长度为 1 的二进制串包括 "0" 和 "1",显然它们都是 s 的子串。
示例 3:
输入:s = "0110", k = 2
输出:false
解释:长度为 2 的二进制串 "00" 没有出现在 s 中。
这题显然也是滑动窗口,以 k 的长度进行滑动窗口,然后判断窗口中的字符串是否在 s 中出现过。这个判断可以使用 unordered_set 来实现。最后判断 set 的长度是否为 2k。
class Solution {
public:
bool hasAllCodes(string s, int k) {
unordered_set<string> set;
for(int i = 0; i + k <= s.size(); i ++){
set.insert(s.substr(i, k));
}
return set.size() == (1 << k);
}
};
更新日志
2025/1/5 12:00
查看所有更新日志
d33e4
-寒假更新每日一题day2于