文字列にC++でサイズKのすべてのバイナリコードが含まれているかどうかを確認します
バイナリ文字列sと整数kがあるとします。長さkのすべてのバイナリコードがsの部分文字列であるかどうかを確認する必要があります。それ以外の場合は、Falseを返します。
したがって、入力がS ="00110110"、k =2の場合、出力はtrueになります。長さ2のバイナリコードは、「00」、「01」、「10」、「11」です。これらはそれぞれインデックス0、1、3、および2に存在します。
これを解決するには、次の手順に従います-
-
1つのセットを定義するv
-
temp:=空白の文字列
-
req:=2 ^ k
-
初期化i:=0の場合、i
-
temp:=temp + s [i]
-
i> =kの場合、-
-
tempの最初のインデックスから1文字を削除します
-
-
i> =k-1の場合、-
-
温度をvに挿入
-
-
vのサイズがreqと同じ場合、-
-
trueを返す
-
-
-
falseを返す
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
lli fastPow(lli b, lli p){
lli ret = 1;
while (p) {
if (p & 1) {
ret *= b;
}
b *= b;
p >>= 1;
}
return ret;
}
bool hasAllCodes(string s, int k) {
unordered_set<string> v;
string temp = "";
lli req = fastPow(2, k);
for (lli i = 0; i < s.size(); i++) {
temp += s[i];
if (i >= k) {
temp.erase(0, 1);
}
if (i >= k - 1) {
v.insert(temp);
}
if ((lli)v.size() == req)
return true;
}
return false;
}
};
main(){
Solution ob;
cout << (ob.hasAllCodes("00110110",2));
} 入力
"00110110",2
出力
1
-
バイナリツリーに、C++でサイズ2以上の重複するサブツリーが含まれていないかどうかを確認します
二分木があると考えてください。ツリーにサイズ2以上の重複するサブツリーがあるかどうかを確認する必要があります。以下のような二分木があるとします- サイズ2の2つの同一のサブツリーがあります。ツリーのシリアル化とハッシュプロセスを使用して、この問題を解決できます。アイデアは、サブツリーを文字列としてシリアル化し、ハッシュテーブルに格納することです。リーフではなく、ハッシュテーブルにすでに存在するシリアル化されたツリーを見つけたら、trueを返します。 例 #include <iostream> #include <unordered_set> using name
-
文字列にすべての一意の文字が含まれているかどうかを確認するPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 sring入力が与えられた場合、文字列にすべての一意の文字が含まれているかどうかを確認する必要があります。 アプローチ ブール値の配列を作成します。ここで、インデックスiの変数フラグは、アルファベットの文字iが文字列に含まれているかどうかを示します。 この文字に2回目に遭遇したとき、文字列文字は一意ではなくなったため、すぐにfalseを返すことができます。 文字列の長さがアルファベットに表示される一意の文字数の値を超える場合も、falseを返すことができます。 文