在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

以上是 在C ++中带子字符串的二进制字符串表示1到N 的全部内容, 来源链接: utcz.com/z/356273.html

回到顶部