子串能表示从 1 到 N 数字的二进制串Java
文章发布较早,内容可能过时,阅读注意甄别。
# 题目
给定一个二进制字符串 s 和一个正整数 n,如果对于 [1, n] 范围内的每个整数,其二进制表示都是 s 的 子字符串 ,就返回 true,否则返回 false 。
子字符串 是字符串中连续的字符序列。
示例 1:
输入:s = "0110", n = 3
输出:true
示例 2:
输入:s = "0110", n = 4
输出:false
提示:
- 1 <= s.length <= 1000
- s[i] 不是 '0' 就是 '1'
- 1 <= n <= 109
# 思路
一部分是冗余的,只匹配N 到 (N>>1)+1,就可以,剩下的都已经包含在这里面了。
# 解法
class Solution {
// 一部分是冗余的,只匹配N 到 (N>>1)+1,就可以,剩下的都已经包含在这里面了。
public boolean queryString(String S, int N) {
int m = (N>>1)+1;
for(int i=m;i<=N;i++){
String b = Integer.toBinaryString(i);
if(!S.contains(b)){
return false;
}
}
return true;
}
}
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
# 总结
- 分析出几种情况,然后分别对各个情况实现