LeetCode:984. String Without AAA or BBB - Python

984. 不含 AAA 或 BBB 的字符串

问题描述:

给定两个整数 AB,返回任意字符串 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
  • 对于给定的AB,保证存在满足要求的 S

问题解释:

题目大概意思是,给你一个AB两种字符,让你组合成一个字符串,而且这个字符串不能出现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))

声明: 总结学习,有问题或不当之处,可以批评指正哦,谢谢。

题目链接参考链接

猜你喜欢

转载自blog.csdn.net/XX_123_1_RJ/article/details/86700283
bbb