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

C++でバランスの取れた文字列に文字列を分割する


バランスの取れた文字列は、左右の文字の数が等しい文字列であることがわかっています。バランスの取れた文字列が最大量のバランスの取れた文字列に分割されているとします。分割されたバランスの取れた文字列の最大量を返す必要があります。したがって、文字列が「RLRRLLRLRL」の場合、4つのバランスの取れた文字列があるため、出力は4になります。 「RL」、「RRLL」、「RL」、および「RL」の各サブストリングには、同じ量のLとRがあります。

これを解決するには、次の手順に従います-

  • cnt:=0、ans:=0を初期化します
  • for i:=0から文字列のサイズ
    • cnt:=0
    • for j:=i to size of string −
      • s [j] =‘R’の場合、cntを1増やし、それ以外の場合はcntを1減らします
      • j –i>0かつcnt=0の場合、ansを1増やし、i:=jにして、ループを中断します
  • 回答を返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
      int balancedStringSplit(string s) {
         int cnt = 0;
         int ans = 0;
         for(int i =0;i<s.size();i++){
            cnt = 0;
            for(int j = i;j<s.size();j++){
               if(s[j] == 'R')cnt++;
               else cnt--;
               if(j-i>0 && cnt == 0 ){
                  ans++;
                  i=j;
                  break;
               }
               //cout << i << " " << j <<" "<< cnt << endl;
            }
         }
         return ans;
      }
};
main(){
   Solution ob;
   cout << ob.balancedStringSplit("RLLLLRRRLR");
}

入力

"RLLLLRRRLR"

出力

3

  1. C++での分割リスト

    numsという整数のリストがあるとすると、左側のすべての数値が厳密に少なくなるように、リストを2つのサブリスト(空ではない)に分割できるかどうかを確認する必要があります。右側のすべての数字よりも。 したがって、入力が[6,4,3,8,10]の場合、left=[6,4,3]およびright=[8,10] のように、出力はtrueになります。 これを解決するには、次の手順に従います- n:=numsのサイズ サイズnの配列の権利を定義する サイズnの左側の配列を定義します left [0]:=nums [0] 右の最後の要素:=numsの最後の要素 初期化

  2. C++で2つのバイナリ文字列を追加するプログラム

    2進数の文字列が2つある場合、それら2つの2進数文字列を加算して得られた結果を見つけ、その結果を2進数文字列として返す必要があります。 2進数は、0または1のいずれかで表される数値です。2つの2進数を加算する際には、2進数の加算規則があります。 0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0, carry 1 入力 str1 = {“11”}, str2 = {“1”} 出力 “100” 入力 str1 = {“110”},