该题解采用的是贪心算法。首先,根据输入的两个整数a和b,分别代表字符'a'和'b'的数量。解题的核心思路是逐步构建结果字符串,同时确保字符串中不会出现连续三个相同的字符。在构建过程中,我们首先检查字符串末尾是否已经有连续两个相同的字符,若有,则添加另一种字符以打破可能的三连字符。若无连续字符,或者上述条件不满足,则优先添加数量较多的字符,以尽快消耗更多的字符。通过这种方式,我们保证了生成的字符串符合题目要求。
时间复杂度: O(a + b)
空间复杂度: O(a + b)
class Solution:
def strWithout3a3b(self, a: int, b: int) -> str:
result = ''
while a > 0 or b > 0:
# 检查末尾是否有连续两个'a'
if len(result) >= 2 and result[-1] == result[-2] == 'a':
result += 'b' # 添加'b'以避免出现'aaa'
b -= 1
# 检查末尾是否有连续两个'b'
elif len(result) >= 2 and result[-1] == result[-2] == 'b':
result += 'a' # 添加'a'以避免出现'bbb'
a -= 1
# 若没有连续字符问题,优先添加剩余数量较多的字符
elif a >= b:
result += 'a'
a -= 1
else:
result += 'b'
b -= 1
return result