984. 不含 AAA 或 BBB 的字符串

a和b中,大的为p,小的为q

令k = p / (q + 1),当i % k == 0时,str += 小的,否则str += 大的,

当然要注意大的因为str加的次数多,所以会在某一次迭代中 <= 小的,但绝不会 < 小的 - 2,可以思考一下为什么

这时每次加一个小的加一个大的即可

class Solution {
public:
    string strWithout3a3b(int a, int b) {
        int p, q;
        char r, t;
        if(a > b)
        {
            p = a;
            r = 'a';
            q = b;
            t = 'b';
        }
        else
        {
            p = b;
            r = 'b';
            q = a;
            t = 'a';
        }
        string str = "";
        int k = ceil(p / (double)(q + 1));

        for(int i = 0; i < a + b; i++)
        {
            if(i > 0 && (i + 1) % (k + 1) == 0 && q != 0)
                str += t, q--;
            else if(p != 0)
                str += r, p--;

            if(p <= q)
            {
                while(p && q)
                {
                    str += t;
                    q--;
                    str += r;
                    p--;
                }
            }

            while(q == 0 && p)
            {
                str += r;
                p--;
            }
            while(p == 0 && q)
            {
                str += t;
                q--;
            }
        }
        return str;




    }
};

 

posted @ 2021-10-20 22:27  WTSRUVF  阅读(55)  评论(0编辑  收藏  举报