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;
    }
  • 相关阅读:
    较全的ASCII码对照表
    关于.NET Framework 3.5 SP1 bootstrapper 包(安装和部署)的解决方案
    C#中DllImport用法和路径问题
    在Winform中给的button等控件添加快捷键的几种方法。
    DataGridView之为每行前面添加序号
    【软件设计过程PowerDesigner v12简介】
    死锁与活锁的区别,死锁与饥饿的区别
    性能优化之 — AS3.0对象池运用
    wc之“HelloWorld”
    php之memcache缓存技术
  • 原文地址:https://www.cnblogs.com/Mayfly-nymph/p/10539968.html
Copyright © 2011-2022 走看看