问题描述:
给定两个整数 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 <= 100
0 <= B <= 100
- 对于给定的
A
和B
,保证存在满足要求的S
。
问题解释:
题目大概意思是,给你一个A
,B
两种字符,让你组合成一个字符串,而且这个字符串不能出现AAA
or BBB
的形式。
问题分析:
题目已经提示了,贪心算法。具体的解法如下:
(1)在一开始的情况下,那个字母比较多,就优先使用。
(2)在随后的情况里,要判断最后两个是否一样,如果一样,就换一个字符,如果不一样,就继续保持上述规则(1)
(3)题目已经保证存在解。所以不用考虑不存在的情况。
Python3实现:
# 贪心算法
# 官方解答如下
class Solution():
def strWithout3a3b(self, A, B):
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)
if __name__ == '__main__':
solu = Solution()
A, B = 1, 2
print(solu.strWithout3a3b(A, B))
声明: 总结学习,有问题或不当之处,可以批评指正哦,谢谢。