C ++中没有AAA或BBB的字符串

假设我们有两个整数A和B,我们必须返回任何字符串S,这样-

  • S的长度为A + B,并且正好包含A个字母“ a”和B个“ b”个字母。

  • 子字符串“ aaa”和“ bbb”将不在字符串S中

因此,如果给定的整数为A = 4,B = 1,则结果将为“ aabaa”。

为了解决这个问题,我们将遵循以下步骤-

  • 定义字符串ret,最初为空

  • | A – B | > = 2

    • ret:= ret连接'bb'

    • 将B减少2

    • 如果A为非零值,则将'a'与ret连接,并将A减1

    • ret:= ret连接'aa'

    • 将A减少2

    • 如果B为非零,则将'b'与ret连接,并将B减1

    • 如果A> B,则

    • 其他

    • 而A为非零或B为非零

      • ret:= ret +'a',A减1

      • 如果B不为零

      • 否则重新组合'b',将B减1,如果A不为0,则将a与ret组合,并将A减1

      • ret:= ret连接'b',将B减1

      • 如果A为非零且(ret的大小<2或不是(ret的大小> = 2并且ret的最后一个元素= ret的倒数第二个元素)和ret的最后一个元素为'a'),则

      • 返回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"