信号が文字列内のすべての位置に到達するのにかかる時間を見つける-C++
このチュートリアルでは、信号が文字列内のすべての位置に到達するのにかかる時間を計算するプログラムを作成します。例を挙げて説明しましょう。
sのみを含む文字列が作成されます およびp 文字。 s シグナルです およびp ポジションです 文字列で。シグナルはsから始まります 左右両方向に移動します。弦の次の位置に移動するのに1単位の時間がかかると想定しています。私たちのタスクは、すべての位置を変換するために必要な時間を計算することです 信号に 。
いくつかの例を見てみましょう。
入力 − pppppspss
出力 − 5
入力 − pspspsps
出力 − 1
入力 − ssssss
出力 − 0
問題の解決に必要な手順を見てみましょう。
-
文字列と時刻を初期化します(0)
-
文字列を繰り返し処理します。
-
連続するpを数えます 文字を入力し、カウントを変数に格納します。
-
現在のキャラクターがsの場合 およびp カウントが前回より多い場合は、 sかどうかを確認してください 左側にあるかどうか。
-
sの場合 両側に存在し、カウントを sとして2つに分割します 両方向に移動できます。
-
pのカウントをリセットします 。
-
例
コードを見てみましょう。
#include <bits/stdc++.h> using namespace std; int timeToConvertToSignalString(string sample_string, int string_len) { int p_count = 0, time = 0; for (int i = 0; i <= string_len; i++) { if (sample_string[i] == 'p') { p_count++; } else { if (p_count > time) { bool is_present_left_side = false; if (((i - p_count) > 0) && (sample_string[i - p_count - 1] == 's')) { is_present_left_side = 1; } if (is_present_left_side) { p_count = ceil((double)p_count / 2); } time = max(time, p_count); } p_count = 0; } } return time; } int main() { string sample_string = "pppppspss"; int n = sample_string.size(); cout << timeToConvertToSignalString(sample_string, n) << endl; return 0; }
出力
上記のプログラムを実行すると、次の結果が得られます。
5
別のケースでプログラムを実行して確認してください。
結論
チュートリアルに質問がある場合は、コメントセクションにそのことを記載してください。
-
C++の辞書で特定のパターンに一致するすべての文字列を検索します
辞書と呼ばれる文字列のリストがあると考えてください。別のパターン文字列があります。私たちの仕事は、パターンに一致する文字列を見つけることです。辞書が[“ abb”、“ xyz”、“ aab”、“ kmm”]のようで、パターンが“ stt”であるとすると、結果は“ abb”、“ kmm”になります。パターンには最初に1つの文字があり、次に2つの同じ文字があるため、同じパターン文字列に従います。 この問題を解決するために、パターンに一致する辞書の単語がエンコード後のパターンと同じハッシュを持つように、パターンをエンコードします。辞書内のすべての単語を繰り返し処理し、ハッシュが同じ場所に表示します
-
シーケンスのセット内のすべてのシーケンスに共通する最長のサブシーケンスを見つけるためのC++プログラム
ここでは、一連のシーケンス内のすべてのシーケンスに共通する最長のサブシーケンスを見つけるためのC++プログラムについて説明します。 アルゴリズム Begin Take the array of strings as input. function matchedPrefixtill(): find the matched prefix between string s1 and s2 : n1 = store length of string s1. n2 = store length of string s2. f