检查一个字符串是否包含所有长度为 K 的二进制子串Java
文章发布较早,内容可能过时,阅读注意甄别。
# 题目
给你一个二进制字符串 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 中。
提示:
- 1 <= s.length <= 5 * 105
- s[i] 不是'0' 就是 '1'
- 1 <= k <= 20
# 思路
Math.pow
# 解法
class Solution {
public boolean hasAllCodes(String s, int k) {
int left=0,right=k;
int len=s.length();
Set<String> set=new HashSet<>();
while(right<=len){
set.add(s.substring(left,right));
left++;
right++;
}
if(set.size()==Math.pow(2,k))
return true;
return false;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 总结
- 分析出几种情况,然后分别对各个情况实现


