leetcode记录:问题难度:简单:984. String Without AAA or BBB

题目出处:https://leetcode.com/problems/string-without-aaa-or-bbb/

题目描述:

给定两个整数A和B,返回任意字符串S,其中:

S的长度为A + B,并且恰好包含A ' A '个字母,以及B ' B '个字母;

子字符串“aaa”不出现在S中;子字符串“bbb”不出现在S中。

Example 1:

Input: A = 1, B = 2
Output: "abb"
Explanation: "abb", "bab" and "bba" are all correct answers.

Example 2: 

Input: A = 4, B = 1
Output: "aabaa"

思路:

题意:构造一个字符串,由字符a和b组成,字符a的个数等于赋值于A的数,同样于 b,字符串的长度为二者之和。

唯一的要求就是不含有3连相同字母,我觉得可以用正则,Example1看出,因为不是构造一个合理的就行,所以在函数末尾写一个判断,来对构造后的字符串进行检测是否满足不3连重复即可。

var strWithout3a3b = function (A, B) {
    let len = A + B,a='a',b='b';
    let resultArr = [];
    let result = '';
    let xunhuan = true;

    while (xunhuan){
        //通过2个while构造数组,转成字符串的准备工作
        while (A > 0 ) {
            resultArr.splice(Math.floor(Math.random() * len), 0, a);
            A--;
        }
        while (B>0){
            resultArr.splice(Math.floor(Math.random() * len), 0, b);
            B--;
        }
        //数组转成字符串
        result = resultArr.join("");
        console.log(result);

        //对字符串进行正则判断
        if(result.indexOf('aaa')===-1&&result.indexOf('bbb')===-1){
            xunhuan = !xunhuan;
            return result
        }
    }
}

事实证明,因为当A和B变大的时候,这个计算就会很大,因为我是随机组成的,一个地方不满足,整条构造序列都要重来,所以我之前的想法可能有问题,应该只构造出一个即使AB很大也能满足条件的字符串。

在solution里翻了一下,有一个新的思路,因为不能3连a或者3连b,所以实际上就是'ab'和'ba'的无序组合。

扫描二维码关注公众号,回复: 5499274 查看本文章

代码如下,注解已写:

var strWithout3a3b = function(A, B) {
    let result = "";

    //无论 "ab" 还是 "ba"拼接,是绝对安全的,下面用安全数对称呼
    //通过A,B的大小选择拼接的方式
    let set = (A >= B) ? "ab" : "ba";

    //dif是A,B的差值,
    //代表了安全数对用完后,剩下了dif个单个'a'或者单个'b'
    let dif = Math.abs(A - B);

    //min是代表了最后剩的到底是dif个'a'还是dif个'b'
    let min = (A >= B) ? B : A;

    //开始拼接,说不清,体会,与上面是一一对应的,目的是合理的插入字符串中
    for (let i = 0; i < min; i++) {
        if (dif > 0) {
            result += (A >= B) ? 'a' : 'b';
            dif--;
        }
        result += set;
    }
    if (dif > 0) {
        for (let j = 0; j < dif; j++) {
            result += (A >= B) ? 'a' : 'b';
        }
    }
    return result;
};

 

猜你喜欢

转载自blog.csdn.net/weixin_42273637/article/details/87871736
bbb