题号984:
给定两个整数和,返回任意字符串,要求满足:
的长度为,且正好包含个字母与个字母;
子串没有出现在中;
子串没有出现在中。
示例 1:
输入:A = 1, B = 2
输出:"abb"
解释:"abb", "bab" 和 "bba" 都是正确答案。
示例 2:
输入:A = 4, B = 1
输出:"aabaa"
提示:
对于给定的和,保证存在满足要求的。
解题思路:
如果A比较大,那么就先把字母a放入字符串s中,反之,如果B比较大,就先放B(贪心策略);
同时需要考虑a、b不能连续出现3次。
具体操作如下——
用变量count_a、count_b保存字符串中字母'a'、'b'连续出现的次数,用于保证不连续出现3个相同字母;
如果字符串长度小于给定的A与B之和,说明字母还没添加完毕,以此作为循环条件;
根据当前A、B的大小选择字母,每次添加一个字母a,则A--,当且仅当A>0时可选字母a(字母b同理);
如果AB,则优先考虑字母b)。
每次选择字母a后,count_a要加1,count_b清零,A-1(选字母b同理)。
代码实现:
// = =代码写的太啰嗦了...循环内的if else应再优化。
时间复杂度和空间复杂度为O(A+B)。
领取专属 10元无门槛券
私享最新 技术干货