C++ 中表示 1 到 N 的子串的二进制字符串


假设我们有一个二进制字符串 S 和一个正整数 N,如果且仅当从 1 到 N 的每个整数 X 的二进制表示都是给定 S 的子串时,我们必须说 true。因此,如果 S = “0110” 且 N = 3,则结果为 true,因为 1、10 和 11 都存在于 0110 中。

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个方法 convert(),它将 n 作为输入

  • ret := 一个空字符串

  • 当 n 不为 0 时

    • ret := ret 与 n mod 2 的连接

    • n := n / 2

  • 反转 ret 并返回

  • 从主方法中执行以下操作

  • 对于 i := N,当 i >= N/2 时,i 减 1

    • temp := 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

更新于:2020年4月30日

199 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告