每日刷题:[1,n]都是子串

给定一个二进制字符串 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值