class Solution {
public:
string strWithout3a3b(int a, int b) {
}
};
984. 不含 AAA 或 BBB 的字符串
给定两个整数 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"
提示:
0 <= a, b <= 100
a
和 b
,保证存在满足要求的 s
原站题解
golang 解法, 执行用时: 4 ms, 内存消耗: 1.9 MB, 提交时间: 2023-09-23 00:45:19
func strWithout3a3b(a int, b int) string { var builder strings.Builder for a > 0 || b > 0 { if a > b { // a多,a每次多消耗一个 if a > 0 { builder.WriteString("a") a-- } if a > 0 { builder.WriteString("a") a-- } if b > 0 { builder.WriteString("b") b-- } }else if a < b { // b多,b每次多消耗一个 if b > 0 { builder.WriteString("b") b-- } if b > 0 { builder.WriteString("b") b-- } if a > 0 { builder.WriteString("a") a-- } }else { // 同样多,消耗速率相同 if a > 0 { builder.WriteString("ab") a-- b-- } } } return builder.String() }
cpp 解法, 执行用时: 4 ms, 内存消耗: 7.1 MB, 提交时间: 2023-09-23 00:44:30
class Solution { public: string strWithout3a3b(int A, int B) { if(B==0) return string(A,'a'); if(A==0) return string(B,'b'); if(A==B) return "ab"+strWithout3a3b(A-1,B-1); return A>B?"aab"+strWithout3a3b(A-2,B-1):"bba"+strWithout3a3b(A-1,B-2); } };
python3 解法, 执行用时: 44 ms, 内存消耗: 15.8 MB, 提交时间: 2023-09-23 00:43:56
class Solution: def strWithout3a3b(self, A: int, B: int) -> str: ans = [] while A or B: if len(ans) >= 2 and ans[-1] == ans[-2]: writeA = ans[-1] == 'b' else: writeA = A >= B if writeA: A -= 1 ans.append('a') else: B -= 1 ans.append('b') return "".join(ans)
java 解法, 执行用时: 1 ms, 内存消耗: 38.7 MB, 提交时间: 2023-09-23 00:43:21
class Solution { public String strWithout3a3b(int A, int B) { StringBuilder ans = new StringBuilder(); while (A > 0 || B > 0) { boolean writeA = false; int L = ans.length(); if (L >= 2 && ans.charAt(L-1) == ans.charAt(L-2)) { if (ans.charAt(L-1) == 'b') writeA = true; } else { if (A >= B) writeA = true; } if (writeA) { A--; ans.append('a'); } else { B--; ans.append('b'); } } return ans.toString(); } }