1.最low的的想法就是将1~N转换为二进制,然后在S里匹配
我们可以可以把搜索过的子串记录下来呢?
可以的,我们先将所有子串转换成十进制存在set里,然后遍历1~N,看是否出现在set里
class Solution {
public boolean queryString(String S, int N) {
HashSet<Integer> set = new HashSet<>();
int len = S.length();
for (int i = 0; i < len; ++i) {// 以i开头
for (int j = i + 1; j <= len; ++j) {
int v = Integer.parseInt(S.substring(i, j), 2);
if (v <= N)// 数字过大可能会出事
set.add(v);
else
break;
}
}
return set.size() == N;
}
}
class Solution {
public boolean queryString(String S, int N) {
// 1~N转换成二进制串,看是否在S中出现过
// O(N * S)
for (int i = 1; i <= N; ++i) {
if (!S.contains(Integer.toBinaryString(i)))
return false;
}
return true;
}
}