Java 代码:
import java.util.HashSet;
import java.util.Set;
public class Solution {
public boolean hasAllCodes(String s, int k) {
int len = s.length();
if (len < k) {
return false;
}
char[] charArray = s.toCharArray();
int num = 1 << k;
Set<Integer> hashSet = new HashSet<>();
for (int i = 0; i < num; i++) {
hashSet.add(i);
}
int window = 0;
for (int i = 0; i < k; i++) {
window += (charArray[i] - '0') * (1 << (k - i - 1));
}
for (int i = 0; i < len - k; i++) {
if (window >= num) {
return false;
}
hashSet.remove(window);
window -= (charArray[i] - '0') * (1 << (k - 1));
window <<= 1;
window += (charArray[i + k] - '0');
}
hashSet.remove(window);
return window <= num && hashSet.size() == 0;
}
public static void main(String[] args) {
Solution solution = new Solution();
// String s = "00110110";
// int k = 2;
// String s = "00110";
// int k = 2;
// String s = "0110";
// int k = 1;
// String s = "0110";
// int k = 2;
// String s = "0000000001011100";
// int k = 4;
String s = "0101";
int k = 13;
boolean res = solution.hasAllCodes(s, k);
System.out.println(res);
}
}