C++で最大k回出現する各文字の部分文字列をカウントします
文字列strが与えられます。目標は、各文字が最大k回出現するstr内のサブストリングの数をカウントすることです。たとえば、入力が「abc」でk =1の場合、部分文字列は「a」、「b」、「c」、「ab」、「bc」、「abc」になります。
例を挙げて理解しましょう。
入力 − str =” abaefgf”
出力 −最初と最後の文字が同じ部分文字列の数は&mmius;です。 9
説明 −部分文字列は
“a”, “b”, “a”, “e” ,”f”, “g”, “f”, “aba”, “fgf”. Total 9.
入力 − str =” abcdef”
出力 −最初と最後の文字が同じ部分文字列の数は次のとおりです。6
説明 −部分文字列は-
“a” , “b” , “c”, “d”, “e” ,”f”. Total 6
以下のプログラムで使用されているアプローチは次のとおりです
与えられた問題を解決するための複数のアプローチ、すなわちナイーブなアプローチと効率的なアプローチがあります。それでは、最初に素朴なアプローチを見てみましょう。すべての長さの部分文字列を関数check()に渡します。その部分文字列が同じ文字で開始および終了する場合は、カウントを増やします。
-
文字列strを取ります。長さをstr.size()として計算します。
-
関数check(string str)は、部分文字列strを受け取り、最初と最後の文字が同じかどうかをチェックします。 (str [0] ==str [length-1])。 trueの場合、1を返します。
-
関数check_Start_End(string str、int length)は、strとその長さを入力として受け取り、同じ文字で開始および終了するstrのサブストリングの数を返します。
-
初期カウントを0とします。
-
2つのforループを使用してstrをトラバースします。 i=0からi
-
すべての長さのsubstr(i、j)を使用して、すべての部分文字列を取得します。各サブ文字列をcheck()に渡します。 1を返す場合は、カウントをインクリメントします。
-
両方のforループの終わりに、カウントには同じ開始文字と終了文字を持つstrのサブストリングがいくつかあります。
-
目的の結果としてカウントを返します。
例
#include <bits/stdc++.h> using namespace std; int count_k(string str, int len, int k){ int count = 0; int arr[26]; for (int i = 0; i < len; i++){ memset(arr, 0, sizeof(arr)); for (int j = i; j < len; j++){ arr[str[j] - 'a']++; if (arr[str[j] - 'a'] <= k) { count++; } else { break; } } } return count; } int main(){ string str = "bbddehj"; int k = 1; int length = str.length(); cout<<"Count of substrings with each character occurring at most k times are: "<<count_k(str, length, k); return 0; }
出力
上記のコードを実行すると、次の出力が生成されます-
Count of substrings with each character occurring at most k times are: 14
-
C++でmが同一線上にある合計nポイントの三角形の数
2D平面上の点の数を表す2つの変数nとmが与えられます。 n個のポイントのうち、m個のポイントは同一線上にあります。目標は、これらのn個の点を使用して形成できる三角形の数を見つけることです。 同一線上の点 −同じ線上にある点は同一線上にあると呼ばれます。ポイントAとBは同一線上にあります。 n =4(A、B、C、D)の場合、m =2(A、B) 三角形の数- 4から任意の3つのポイントを選択=4C 3 ただし、同一線上の点は三角形を形成できないため、上記でカウントされる可能性のある三角形を削除します=2C 3 三角形の合計=4C 3 --2C 3 =4-0 =4
-
C++で最も水が多いコンテナ
コンテナの壁の高さの配列が与えられます。目標は、最大量の水を入れることができる容器を見つけることです。壁の高さは配列の要素であるため、壁の間の距離は2つの壁の間の幅と見なされます。たとえば、高さArr[i]とArr[j]の壁の間にj-i幅があります(0 <=i