この問題では、指定された文字列の最長の非増加サブシーケンスを見つける必要があります。
非増加とは、文字が同じか降順であることを意味します。バイナリ文字列には「0」と「1」のみが含まれるため、結果の文字列は「1」で始まり「0」で終わるか、「0」または「1」で始まり「1」で終わる必要があります。
この問題を解決するには、文字列の各位置で接頭辞「1」と接尾辞「0」を数え、接頭辞「1」と接尾辞「0」の最大合計を求めます。
問題文 - バイナリ文字列 str が与えられています。指定された文字列から最長の非増加サブシーケンスを見つける必要があります。
###例### リーリー リーリーイラスト
イラスト
方法1
ステップ 1
ステップ 2
ステップ 3
ステップ 4
ステップ 5
ステップ 6
ステップ 7
ステップ 8
ステップ 9
ステップ 10
###例### 入力 '010100' の場合、プレフィックス配列は [0, 1, 1, 2, 2, 2]、サフィックス 0 配列は [4, 3, 3, 2, 2, 1] です。合計配列は [4, 4, 4, 4, 4, 1] となり、合計配列の最大値は 4 になります。したがって、答えは4となります。
リーリー ###出力### リーリーこの方法では、まずゼロの合計数を数えます。その後、文字列の反復処理を開始し、「1」を数え続け、0 が見つかった場合は「0」ずつ減分します。さらに、各反復で 0 と 1 のカウントを加算し、結果の最大値を見つけます。
ステップ 1
ステップ 2
ステップ 3
ステップ 4
ステップ 5
ステップ 6
###例### リーリー ###出力### リーリー 時間計算量 - O(N)。文字列内のゼロの合計数を数え、文字列を走査して最長の部分列を見つけるためです。
ここでは、両方の方法の時間計算量は同じですが、空間計算量が異なります。 2 番目の方法ではコードを最適化するときに定数スペースを使用しますが、最初の方法では動的スペースを使用してプレフィックス 1 とサフィックス 0 の合計数を保存します。
以上がバイナリ文字列内の最長の非増加サブシーケンスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。