指定された文字列に長さ 2 以上の繰り返しサブシーケンスがあるかどうかを調べる C++ プログラム
指定された文字列で、その文字列内で繰り返される長さ 2 以上の部分シーケンスを見つけます。サブシーケンス要素番号のインデックスを同じ順序にすることはできません。
リーリーこのアプローチがさまざまな状況でどのように機能するかを理解するために、以下のいくつかの例を見てみましょう -
例 1 - str = "PNDPNSP"
説明 -ここでは、文字列内に繰り返しのサブシーケンス「PN」があるため、答えは真です。
例 2 - str = "PPND"
説明 - ここでは、文字列内に長さ 2 以上の繰り返し部分シーケンスがないため、答えは間違っています。
例 3 − str = "PPNP"
説明 - ここでは、「PP」インデックス 0 と 1、「PP」インデックス 1 と 3 が存在し、使用される「PP」のサブシーケンス インデックスの順序が異なるため、答えは正しいです。 (0 から始まるインデックス)
ブルート フォース アプローチ
の中国語訳は次のとおりです。ブルート フォース アプローチ
このメソッドは、長さ 2 (最小長) のすべての可能なサブシーケンスを生成し、見つかったサブシーケンスでそのサブシーケンスが既に存在しているかどうかを確認します。サブシーケンスが既に存在する場合は true を返し、プログラムを終了します。それ以外の場合、反復の完了後、何も見つからなかった場合は false を返します。
最悪の場合、このサブシーケンスは存在しない可能性があり、考えられるすべての結果を生成することになります。
2 つの長さのサブシーケンスを作成して保存します。したがって、計算されたサブシーケンスをハッシュして O(1) の挿入と検索を達成すると仮定すると、これは O(n^2) になります。サブシーケンスの合計も O(n^2) なので、記憶領域も同様です。変更された最長共通部分列 (LCS)
LCS アルゴリズムは、2 つの文字列内の最長の共通部分シーケンスを見つけます。これは、2 次元行列の反復法を使用する標準的な動的プログラミング手法です。時間計算量は O(n^2) です。変更されたメソッドでは、指定された文字列自体のみを検索します。ただし、現在位置のインデックスが同じでないかどうかも確認します。
###例###長さ 2 以上の繰り返しサブシーケンスの検索を容易にする、修正された最長共通部分シーケンス アルゴリズムを実装するには、以下の C コードを参照してください。 -
リーリー ###出力### リーリーもちろん、時間と空間の複雑さは O(n^2) ですが、最初の方法よりも、よりエレガントで、O(1) ハッシュを生成するのが簡単です。
改善されたソリューション
このアプローチでは、前のアプローチに基づいていくつかの観察を試みます。
観察 1-文字が 2 回以上出現する場合、答えは常に true です。理由を見てみましょう?
例 - 文字列 str = "AVHJFBABVNHFA" の 0、6、および 12 の位置に「AAA」があります。それで インデックス 0 と 6 に「AA」をサブシーケンスとして、インデックス 6 と 12 に「AA」をサブシーケンスとして含めることができます。 別のものとして。
観察 2 - 文字が 1 回だけ繰り返される場合、その文字は結果に寄与しません。 サブシーケンスは最大でも 1 つのサブシーケンスでしか使用できないためです。それはうまくいきません 少なくとも 2 つのサブシーケンスが必要であるためです。したがって、すべての文字を削除または無視できます 同時に起こりました。
観察 3 -文字列が回文であり、最初の 2 つの観察が当てはまる場合、答えは次のようになります。 文字列の長さが奇数でない限り、常に false です。理由を見てみましょう?
例 - 文字列 str = "PNDDNP"
説明 - 文字の順序が整っていないため、文字を見つけることはできません。 サブシーケンスの順序は同じであるため、これは不可能です。
###例###上記の 3 つの観察結果すべてに基づいて、文字列内に 1 回出現するすべての文字を削除し、特定の文字が 2 回以上出現するかどうか、または文字列が回文でないかどうかを確認すれば、答えは正しいと結論付けます。 。 C で実装された改良されたソリューションを見てみましょう - リーリー ###出力### リーリー ###結論は### 私たちは、観察とハッシュを使用することがこの問題を解決する最良の方法であると結論付けました。時間計算量は O(n) です。スペースの複雑さも O(n) のオーダーであり、新しい文字列と定数 26 文字のハッシュが作成されます。
以上が指定された文字列に長さ 2 以上の繰り返しサブシーケンスがあるかどうかを調べる C++ プログラムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









iPhone で「探す」をオフにするとどうなりますか? 「iPhone を探す」は、紛失または盗難に遭ったデバイスを見つけるのに役立ちます。 「iPhone を探す」を有効にすると、地図上でデバイスの位置を追跡したり、サウンドを鳴らしたり、デバイスを見つけやすくしたりできます。 Find My には、他人が iPhone を使用できないようにするためのアクティベーション ロックも含まれています。 「iPhone を探す」をオフにすると、これらの機能がすべて失われるため、紛失した Apple デバイスの回復が困難になる場合があります。 「iPhone を探す」は非常に便利ですが、携帯電話を販売、寄付、下取りに出したり、バッテリー交換やその他のサービスに送ったりする場合は、この機能を無効にする必要があります。これにより、誰もあなたに関する情報にアクセスできなくなります

Apple の Find My アプリを使用すると、iPhone またはその他のデバイスの位置を特定して、紛失したり忘れられたりするのを防ぐことができます。 Find My はデバイスを追跡するのに便利なツールですが、プライバシーの問題が心配な場合、バッテリーを消耗したくない場合、またはその他の理由で無効にすることもできます。幸いなことに、iPhone で「探す」をオフにする方法はいくつかあり、この記事ですべて説明します。 iPhoneで「探す」をオフにする方法【4つの方法】 iPhoneで「探す」をオフにする方法は4つあります。方法 1 を使用して検索をオフにした場合は、検索を無効にするデバイスからこれを行うことができます。方法 2、3、4 を続行するには、「電話を探す」をオフにする iPhone の電源をオフにするか、

C# で Array.IndexOf 関数を使用して、配列内の要素のインデックスを検索します。C# プログラムでは、配列内の要素のインデックスを検索する必要がある場合、Array.IndexOf 関数を使用できます。 Array.IndexOf 関数は、指定された配列範囲内で指定された要素を検索し、最初に出現した要素のインデックスを返します。要素が見つからない場合は、-1 が返されます。以下は、Array.IndexOf 関数を使用して配列内の要素を検索する方法を示すサンプル コードです。

ハードドライブのシリアル番号と MAC アドレスは、コンピュータ ハードウェアの重要な識別子であり、コンピュータ システムの管理と保守に非常に役立ちます。この記事では、ハードディスクのシリアル番号とMACアドレスを確認する方法を紹介します。 1. ハードドライブのシリアル番号を見つける ハードドライブのシリアル番号は、ハードドライブの製造元がハードドライブを識別および追跡するために使用する一意の識別子です。オペレーティング システムが異なると、ハード ドライブのシリアル番号を見つける方法が若干異なります。 Windows: コマンド プロンプトを開き (スタート メニューで「cmd」を検索)、次のコマンドを入力して Enter キーを押します: wmicdisk

PHP の glob() 関数は、ファイルまたはディレクトリを検索するために使用され、強力なファイル操作関数です。指定されたパターン一致に基づいてファイルまたはディレクトリのパスを返すことができます。 glob() 関数の構文は次のとおりです。 glob(pattern, flags) ここで、 pattern は照合するパターン文字列を表し、*.txt (.txt で終わるファイルの照合) などのワイルドカード式にすることができます。特定のファイルパス。 flags は、関数を制御するために使用されるオプションのパラメータです。

双曲線関数は、円の代わりに双曲線を使用して定義され、通常の三角関数と同等です。ラジアン単位で指定された角度から双曲線正弦関数の比率パラメーターを返します。しかし、その逆、つまり別の言い方をすればいいのです。双曲線正弦から角度を計算したい場合は、双曲線逆正弦演算のような逆双曲線三角関数演算が必要です。このコースでは、C++ で双曲線逆サイン (asinh) 関数を使用し、ラジアン単位の双曲線サイン値を使用して角度を計算する方法を説明します。双曲線逆正弦演算は次の式に従います -$$\mathrm{sinh^{-1}x\:=\:In(x\:+\:\sqrt{x^2\:+\:1})}ここで\:In\:is\:自然対数\:(log_e\:k)

マップは C++ の特別なタイプのコンテナで、各要素は 2 つの値、つまりキー値とマップ値のペアです。キー値は各項目のインデックス付けに使用され、マップされた値はキーに関連付けられた値です。マップされた値が一意であるかどうかに関係なく、キーは常に一意です。 C++ でマップ要素を出力するには、反復子を使用する必要があります。項目のセット内の要素は、反復子オブジェクトによって示されます。イテレータは主に配列や他のタイプのコンテナ (ベクトルなど) で使用され、特定の範囲内の特定の要素を識別するために使用できる特定の操作セットを備えています。イテレータをインクリメントまたはデクリメントして、範囲またはコンテナ内に存在するさまざまな要素を参照できます。イテレータは、範囲内の特定の要素のメモリ位置を指します。イテレータを使用して C++ でマップを出力する まず、定義方法を見てみましょう。

名前変更機能は、ファイルまたはディレクトリを古い名前から新しい名前に変更します。この操作は移動操作と似ています。したがって、この名前変更機能を使用してファイルを移動することもできます。この関数は、stdio.h ライブラリ ヘッダー ファイルに存在します。 rename 関数の構文は次のとおりです: intrename(constchar*oldname,constchar*newname); rename() 関数は 2 つのパラメータを受け取ります。 1 つは古い名前、もう 1 つは新しい名前です。どちらのパラメータも、ファイルの古い名前と新しい名前を定義する定数文字へのポインタです。ファイルの名前が正常に変更された場合はゼロを返し、それ以外の場合はゼロ以外の整数を返します。名前変更操作中
