给定一个二进制字符串 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 <= 10的9次方
标准代码:
void itob(char* s, int num)
{
int len=0;
while(num>0)
{
s[len++]='0'+(num&1);
num/=2;
}
s[len]='\0';
int left=0;
len--;
while(left<len)
{
char temp=s[len];
s[len]=s[left];
s[left]=temp;
len--;
left++;
}
}
bool queryString(char * s, int n)
{
char bin[32];
for(int i=1;i<=n;i++)
{
itob(bin,i);
if(strstr(s,bin) == NULL )
return false;
}
return true;
}
int len=0;
while(num>0)
{
s[len++]='0'+(num&1);
num/=2;
}
s[len]='\0';
此功能是将一个数num转换成二进制的形式存储,使用了&(位与)运算进行计算
在此程序中调用了一个函数:strstr(),包含在string.h库里面
在 C 语言中,可以使用标准库函数
strstr()
来判断一个字符串是否包含另一个字符串。strstr()
函数的原型为char *strstr(const char *str1, const char *str2)
,其返回值是指向第一个匹配到的子串的指针,如果没有匹配到则返回 NULL。C++ 的标准库也提供了类似的函数std::string::find()
和std::string::substr()
,分别用于查找子串和获取子串。
strstr()函数补全代码为:
char *my_strstr(const char *str1, const char *str2)
{
const char *p1 = str1;
const char *p2 = str2;
const char *p3 = NULL;
while (*p1 != '\0')
{
p3 = p1;
while (*p2 == *p3 && *p2 != '\0')
{
p2++;
p3++;
}
if (*p2 == '\0')
return (char *) p1;
p2 = str2;
p1++;
}
return NULL;
}
strstr()
函数,用于在一个字符串中查找指定的子串并返回其首次出现的位置(若不存在则返回 NULL
)