C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で1からNを表すサブ文字列を持つバイナリ文字列


バイナリ文字列Sと正の整数Nがあるとすると、1からNまでのすべての整数Xについて、Xのバイナリ表現が指定されたSの部分文字列である場合にのみ、trueと言わなければなりません。したがって、S =“ 0110 」およびN=3の場合、1、10、および11はすべて0110に存在するため、結果はtrueになります。

これを解決するには、次の手順に従います-

  • nを入力として受け取るconvert()のメソッドを定義します

  • ret:=空の文字列

  • nが0ではない場合

    • ret:=ret concatenate n mod 2

    • n:=n / 2

  • 逆のretとreturn

  • メインの方法から、次のようにします

  • i:=Nの場合、i> =N / 2の場合、iを1減らします

    • temp:=convert(i)

    • 温度が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

  1. C++で2つのバイナリ文字列を追加するプログラム

    2進数の文字列が2つある場合、それら2つの2進数文字列を加算して得られた結果を見つけ、その結果を2進数文字列として返す必要があります。 2進数は、0または1のいずれかで表される数値です。2つの2進数を加算する際には、2進数の加算規則があります。 0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0, carry 1 入力 str1 = {“11”}, str2 = {“1”} 出力 “100” 入力 str1 = {“110”},

  2. C++で角かっこを使用した文字列への二分木

    この問題では、二分木が与えられます。私たちのタスクは、C++でバイナリツリーを角かっこ付きの文字列に変換するプログラムを作成することです。 二分木の値は整数であり、事前順序トラバースの方法でプログラムに供給されます。文字列には整数と括弧()のみを含める必要があります。また、文字列を最適化する必要があります。つまり、空のペアをすべて削除する必要があります。 二分木 は、各ノードが最大2つの子を持つことができるという特別な条件を持つツリーです。 二分木の例- プレオーダートラバーサル:[4、1、8、3、9、2、5] 問題を理解するために例を見てみましょう − 入力 preorde