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

C++で文字を交換および削除した後のバランスの取れた文字列の最大長


(、)、{、}、[、]文字のみを含む文字列が与えられます。目標は、隣接する文字を交換したり、文字を削除したりすることでバランスが取れるように、そのような文字列の最大長を見つけることです。これを行うには、隣接する文字を比較します。それらが互いに反対である場合は、それらを交換できます。 (} {、)(、] [は交換できますが、{{、))、[[、}}、))、]]は交換できません)。

また、キャラクターに一致するペアがない場合は、削除することもできます。 (“ {{}] [“、ここで最初の{は削除でき、バランスの取れた文字列の長さは4になります)

入力

str[]= “ {{{}}{]]][()” length 12

出力

Maximum length of balances string: 8

説明 − str[0]とstr[1]は交換できません、str [0] =“ {{}} {]]] [()”を削除します元のstr[1]とstr[2]は交換できません、str[を削除します1] =“ {}} {]]] [()”{}バランスが取れている}{スワップ可能、次の2を削除]]、スワップ] [および()もバランスが取れている最終的な文字列は{} {} []( )。長さは8です。

入力

str[]= “(((((()” length 7

出力

str[]= “(((((()” length 7

説明 − str[5]とstr[6]のみのバランスが取れているので、すべて削除します。最後の文字列()。長さは2です

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

  • 文字配列str[]は、元の文字列を格納します。整数の長さは文字列の長さを格納します。

  • 関数maxBalancedStr(char str []、int len)は、文字列とその長さをパラメーターとして受け取り、バランスの取れた文字列の最大長を返します。

  • 変数countは、そのような文字列の長さ(最初は0)を格納するために使用されます。

  • 最初の文字から文字列のトラバースを開始し、隣接する文字を入れ替えて両方のバランスをとることができるかどうかを確認します。または、すでにバランスが取れている場合は、カウントを2増やします。

  • ()、)(と{}、} {と[]、] [のようなペアに対してこれを行い、そのようなペアが存在する場合もiをインクリメントして、次の文字に移動します。

  • 最後に、カウントはバランスの取れた文字列の長さを格納します。

  • 結果としてカウントを返します。

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
// Function to return the length of
// the longest balanced sub-string
int maxBalancedStr(char str[20], int len){
   int count=0;
   // Traversing the string
   for (int i = 0; i <len;i++) {
      // Check type of parentheses and
      // incrementing count for it
      if((str[i]=='(' && str[i+1]==')') || (str[i]==')' && str[i+1]=='(')) //can swap{
         count+=2; ++i; }
      else if((str[i]=='{' && str[i+1]=='}') || (str[i]=='}' && str[i+1]=='{')) //can swap{
         count+=2; ++i; }
      else if((str[i]=='[' && str[i+1]==']') || (str[i]==']' && str[i+1]=='[')) //can swap          count+=2; ++i; }
   }
   return count;
}
// Driven code
int main(){
   char str[] = ")([]]((";
   int length=7;
   cout << maxBalancedStr(str,length);
   return 0;
}

出力

4

  1. C ++のgetline(文字列)

    これは、フォーマットされていない入力としてストリームから文字を抽出し、抽出された文字が区切り文字になるか、n文字がsに書き込まれる(終了ヌル文字を含む)まで、c文字列としてsに格納するために使用されます。宣言は次のようなものです: basic_istream& getline (char_type* s, streamsize n ); basic_istream& getline (char_type* s, streamsize n, char_type delim); パラメータは、文字の配列への「s」ポインタであり、抽出された文字はc_stringとして格納されます。

  2. 文字列の最初と最後の文字が等しいかどうかをチェックするC++プログラム

    文字列の入力で与えられ、タスクは与えられた文字列の最初と最後の文字が等しいかどうかをチェックすることです。 例 Input-: study Output-: not equal    As the starting character is ‘s’ and the end character of a string is ‘y’ Input-: nitin Output-: yes it have first and last equal characters    As the starting char