假设我们有一个二进制字符串S和一个正整数N,当且仅当对于从1到N的每个整数X,X的二进制表示形式是给定S的子字符串时,我们必须说为true。因此,如果S =“ 0110 ”且N = 3,则结果为true,因为0110中存在1,10和11。
为了解决这个问题,我们将遵循以下步骤-
定义一个方法convert()
,将n作为输入
ret:=一个空字符串
当n不为0时
ret:= ret连接n mod 2
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