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 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告