zoukankan      html  css  js  c++  java
  • LeetCode 984.不含AAA或BBB的字符串(C++)

    给定两个整数 A 和 B,返回任意字符串 S,要求满足:

    • S 的长度为 A + B,且正好包含 A 个 'a' 字母与 B 个 'b' 字母;
    • 子串 'aaa' 没有出现在 S 中;
    • 子串 'bbb' 没有出现在 S 中。

    示例 1:

    输入:A = 1, B = 2
    输出:"abb"
    解释:"abb", "bab" 和 "bba" 都是正确答案。
    

    示例 2:

    输入:A = 4, B = 1
    输出:"aabaa"

    提示:

    1. 0 <= A <= 100
    2. 0 <= B <= 100
    3. 对于给定的 A 和 B,保证存在满足要求的 S

    思路:直观感觉,我们应该先选择当前所剩最多的待写字母写入字符串中。举一个例子,如果 A = 6, B = 2,那么我们期望写出 'aabaabaa'。进一步说,设当前所剩最多的待写字母为 x,只有前两个已经写下的字母都是 x 的时候,下一个写入字符串中的字母才不应该选择它。

    class Solution {
    public:
        string strWithout3a3b(int A, int B) {
        string str = "";
        char a = 'a', b = 'b';
        if (A < B) {
            swap(a, b);
            swap(A, B);
        }
        //cout << "A:" << A << " " << a << "  B:" << B << " " << b << endl;
    
        while (A > 0 || B > 0){
            bool flag = false;
            if (A - B >= 3) {
                flag = true;
            }
            if (A - 2 >= 0) {
                str.push_back(a);
                str.push_back(a);
                A = A - 2;
            }
            else if (A == 1) {
                str.push_back(a);
                A--;
            }
            if (flag) {
                str.push_back(b);
                B--;
            }
            else if(B - 2 >= 0){
                str.push_back(b);
                str.push_back(b);
                B = B - 2;
            }
            else if (B == 1) {
                str.push_back(b);
                B--;
            }
        }
        return str;
    }
    };

    下面是大哥们的解法:

    string strWithout3a3b(int A, int B) {
        //保证A > B
        string str = "";
        char a = 'a', b = 'b';
        if (A < B) {
            swap(A, B);
            swap(a, b);
        }
        while (A > 0 || B > 0) {
            if (A > 0) {
                str.push_back(a);
                A --;
            }
            if (A > B) {
                str.push_back(a);
                A --;
            }
            if (B > 0) {
                str.push_back(b);
                B --;
            }
        }
        return str;
    }
  • 相关阅读:
    【Cloud Foundry】Could Foundry学习(二)——核心组件分析
    POJ 1789-Truck History
    设置静态IP
    oracle切割字符串后以单列多行展示
    SQL server语句练习
    hdu 3308 LCIS(线段树)
    HDU 1556 Color the Ball 线段树 题解
    CSipSimple最新版本号
    奢侈品行业-新手专题-亿邦动力网
    单身潮_百度百科
  • 原文地址:https://www.cnblogs.com/Mayfly-nymph/p/10539968.html
Copyright © 2011-2022 走看看