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

C++でAAAまたはBBBのない文字列


2つの整数AとBがあるとすると、-

のような任意の文字列Sを返す必要があります。
  • Sの長さはA+Bで、正確にA個の文字「a」とB個の「b」文字が含まれています。

  • サブストリング「aaa」と「bbb」はストリングSには含まれません

したがって、指定された整数がA =4、B =1の場合、結果は「aabaa」になります。

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

  • 文字列retを定義します。最初は空です

  • 一方|A– B |> =2、

    • A> Bの場合、

      • ret:=ret連結「aa」

      • Aを2減らします

      • Bがゼロ以外の場合、「b」をretと連結し、Bを1つ減らします

    • その他

      • ret:=ret連結「bb」

      • Bを2減らす

      • Aがゼロ以外の場合、「a」をretと連結し、Aを1つ減らします

  • Aがゼロ以外、またはBがゼロ以外の場合

    • Aがゼロ以外で、(retのサイズ<2または(retのサイズ> =2およびretの最後の要素=retの最後から2番目の要素)でなく、retの最後の要素が「a」の場合)

      • ret:=ret +‘a’、Aを1減らします

      • Bがゼロ以外の場合

        • ret:=ret連結「b」、Bを1つ減らします

      • それ以外の場合は、「b」をret連結し、Bを1減らし、Aが0でない場合は、aをretと連結し、Aを1減らします

  • retを返す

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   string strWithout3a3b(int A, int B) {
      string ret = "";
      while(abs(A - B) >= 2){
         if(A > B){
            ret += 'a';
            ret += 'a';
            A -= 2;
            if(B) {
               ret += 'b';
               B--;
            }
         }else{
            ret += 'b';
            ret += 'b';
              B -= 2;
              if(A) {
               ret += 'a';
               A--;
            }
         }  
     }
      while(A || B){
         if(A && (ret.size() < 2 || !(ret.size() >= 2 && ret[ret.size() - 1] == ret[ret.size() -                2] && ret[ret.size() - 1] == 'a') ) ){
            ret += 'a';
            A--;
            if(B) {
               ret += 'b';
               B--;
            }
         }else{
            ret += 'b';
            B--;
            if(A) {
              ret += 'a';
              A--;
            }
         }      
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.strWithout3a3b(4, 1));
}

入力

4
1

出力

"aabaa"

  1. C++でゲームVをジャンプする

    arrと呼ばれる整数の配列と整数dがあるとします。 1つのステップで、インデックスiから-にジャンプできます。 i + xここで、i +x

  2. C ++で文字列をトークン化しますか?

    最初の方法は、文字列ストリームを使用して、スペースで区切られた単語を読み取ることです。これは少し制限されていますが、適切なチェックを提供すれば、タスクはかなりうまくいきます。 例 #include <vector> #include <string> #include <sstream> using namespace std; int main() {    string str("Hello from the dark side");    string tmp; // A string