C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の2つの大文字の間の最大の異なる小文字のアルファベット


与えられたタスクは、与えられた文字列の2つの大文字のアルファベットの間に存在する個別の小文字のアルファベットの最大数を見つけることです。

例を使用して、私たちがしなければならないことを理解しましょう-

入力

str = “JKyubDoorG”

出力

3

説明

「yub」は、2つの大文字のアルファベットKとDの間にあり、カウント3になります。

「oor」は、2つの大文字のアルファベットDとGの間にあり、「o」は繰り返しのアルファベットであり、異なるアルファベットを探しているため、カウント2になります。

したがって、出力は3です。

入力

str = “ABcefsTaRpaep”

出力

4

以下のプログラムで使用されるアプローチは次のとおりです

  • 関数Max()でint sizeを初期化します =s.length()は、指定された文字列の長さを格納します。

  • i =0からi ='A' &&s [i] <='Z')かどうかを確認します。その場合は、をインクリメントします と休憩;

  • int ansを初期化します =0で最終回答と別の配列cnt[26]={0}を格納します。

  • i =0からi ='A' &&s [i] <='Z')であるかどうかを確認して、現在のアルファベットが大文字であるかどうかを確認します。その場合は、int CurrMaxを初期化します。 =0で現在の最大値を保存します。

  • i =0からi<26までループし、(cnt [i]> 0)かどうかを確認します。その場合は、CurrMaxをインクリメントします。

  • forループの外側で、 ansを更新します ans =max(ans、CurrMax);を置くことによってmemset(cnt、0、sizeof(cnt));

    を使用してcnt[]配列をリセットします。
  • 上記のif()ステートメントを閉じて、(s [i]> ='a' &&s [i] <='z')かどうかを確認します。その場合は、cnt[s[i]-'a']をインクリメントします。

  • forループを閉じて、ansを返します。

#include <bits/stdc++.h>
using namespace std;
int Max(string s){
   int size = s.length();
   // Ignore the lowercase alphabets in beginning
   for (int i = 0; i < size; i++){
      if (s[i] >= 'A' && s[i] <= 'Z'){
         i++;
         break;
      }
   }
   int ans = 0;
   int cnt[26] = { 0 };
   for (int i = 0; i < size; i++) {
      // If alphabet is uppercase,
      if (s[i] >= 'A' && s[i] <= 'Z'){
         //Counting all lower case
         //distinct alphabets
         int CurrMax = 0;
         for (int i = 0; i < 26; i++){
            if (cnt[i] > 0)
               CurrMax++;
         }
         // Update ans
         ans = max(ans, CurrMax);
         // Reset count array
         memset(cnt, 0, sizeof(cnt));
      }
      // If alphabet is lowercase
      if (s[i] >= 'a' && s[i] <= 'z')
         cnt[s[i] - 'a']++;
   }
   return ans;
}
// Driver function
int main(){
   string str = "JKyubDoorG";
   cout << Max(str);
   return 0;
}

出力

3

  1. C++のツリー内の2つの交差しないパスの最大積

    この問題では、n個のノードを持つ無向接続ツリーTが与えられます。私たちのタスクは、C++のツリー内の2つの交差しないパスの最大積を見つけるプログラムを作成することです。 問題の説明 −ツリー内の交差しない2つのパスの最大積を見つける。興味のないすべてのパスを見つけてから、それらの長さの積を見つけます。 問題を理解するために例を見てみましょう 入力 グラフ- 出力 8 説明 考慮される交差しないパスはC-A-B およびF-E-D-G-H 。 長さは2と4です。Product=8。 ソリューションアプローチ この問題の解決策は、DFSを使用してツリーをトラバースすることです。そ

  2. C++のBSTの2つのノード間の最大要素

    問題の説明 N個の要素の配列と、指定された配列に属する2つの整数A、Bが与えられます。 arr[0]からarr[n-1]に要素を挿入して、二分探索木を作成します。タスクは、AからBへのパスで最大の要素を見つけることです。 例 配列が{24、23、15、36、19、41、25、35}の場合、次のようにBSTを形成できます- A=19およびB=41とすると、これら2つのノード間の最大要素は41です。 アルゴリズム ノードAおよびBの最も低い共通祖先(LCA)を見つけます。 LCAとAの間の最大ノードを見つけます。これをmax1と呼びましょう LCAとBの間の最大ノードを見つけます。こ