Given two integers A
and B
, return any string S
such that:
S
has lengthA + B
and contains exactlyA
'a'
letters, and exactlyB
'b'
letters;- The substring
'aaa'
does not occur inS
; - The substring
'bbb'
does not occur inS
.
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"
Note:
0 <= A <= 100
0 <= B <= 100
- It is guaranteed such an
S
exists for the givenA
andB
.
分两种情况
1.A和B相等时,a和b挨个摆就行了
2.A和B不相等,那个要考虑大的那个数对应的字符要两两组合了当差值大于2的时候,我们想办法把这种情况经过处理变为第一种的情况,设A-B为cha,即cha = Math.abs(A - B),设少的一方拿出x个字符可以分割2x+2个字符,就像这样aabaabaa,2个b分割了6个a,所以根据公式 2x+2 - x = cha => x + 2 = cha => x = cha - 2, 这样求出的x表示,少的一方拿出x个对应字符,可以抵消数量上的差值,抵消之后,接下来排就按照第一种情况就行了
代码:
/**
* @param {number} A
* @param {number} B
* @return {string}
*/
var strWithout3a3b = function(A, B) {
let ans = '';
let cha = Math.abs(A - B);
let x = cha - 2;
let num = x * 2 + 2;
if(x > 0) {
if(A > B) {
while(x) {
ans += 'aa';
ans += 'b';
x --;
}
ans += 'aa';
A -= num;
while(A > 0) {
ans += 'ba';
A --;
}
}else {
while(x) {
ans += 'bb';
ans += 'a';
x --;
}
ans += 'bb';
B -= num;
while(B > 0) {
ans += 'ab';
B --;
}
}
}else {
if(A > B) {
while(A > 0 || B > 0) {
if(A > 0) {
ans += 'a';
A --;
}
if(B > 0) {
ans += 'b';
B --;
}
}
}else {
while(A > 0 || B > 0) {
if(B > 0) {
ans += 'b';
B --;
}
if(A > 0) {
ans += 'a';
A --;
}
}
}
}
return ans;
};
Status:
Success
Runtime: 68 ms, faster than 100.00% of JavaScript online submissions for String Without AAA or BBB.