在C ++中带子字符串的二进制字符串表示1到N
假设我们有一个二进制字符串S和一个正整数N,当且仅当对于从1到N的每个整数X,X的二进制表示形式是给定S的子字符串时,我们必须说为true。因此,如果S=“0110”且N=3,则结果为true,因为0110中存在1,10和11。
为了解决这个问题,我们将遵循以下步骤-
定义一个方法convert()
,将n作为输入
ret:=一个空字符串
当n不为0时
ret:=ret连接nmod2
n:=n/2
反向退回
在主要方法中,执行以下操作
对于i:=N,当i>=N/2时,将i减1
温度:=convert(i)
如果temp不在S中,则返回false
返回true。
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h> using namespace std; class Solution { public: string convert(int n){ string ret = ""; while(n){ ret += (n % 2) + '0'; n /= 2; } reverse(ret.begin(), ret.end()); return ret; } bool queryString(string S, int N) { for(int i = N; i >= N/2; i-- ){ string temp = convert(i); if(S.find(temp) == string::npos) return false; } return true; } }; main(){ Solution ob; cout << (ob.queryString("0110", 3)); }
输入值
"0110" 3
输出结果
1