在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连接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