题目:
如果字符串中不含有任何 'aaa','bbb' 或 'ccc' 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。
给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件的字符串 s:
s 是一个尽可能长的快乐字符串。
s 中 最多 有a 个字母 'a'、b 个字母 'b'、c 个字母 'c' 。
s 中只含有 'a'、'b' 、'c' 三种字母。
如果不存在这样的字符串 s ,请返回一个空字符串 ""。
分析:
使用贪心算法:每次都选择剩下数量最多的字母添加 ,因为 数量少的字母需要用做中间隔着,这样才会最长。全局最优由局部最优构成。
附上网站大佬的python代码【自己写的太垃圾,后面优化!】:
class Solution:
def longestDiverseString(self, a: int, b: int, c: int) -> str:
x = [[a, 'a'],[b, 'b'],[c,'c']]
#print(sorted(x,reverse=True))
res = ""
while True:
for num in sorted(x,reverse=True):
if num[0] <= 0:
return res
if len(res) >= 2 and res[-2:] == num[1] * 2:
continue
res += num[1]
num[0] -= 1
break
return res
博客讨论了一种通过贪心算法来构造最长的「快乐字符串」的方法。给定a、b、c三个整数分别代表字母'a'、'b'、'c'的数量限制,目标是生成一个尽可能长的字符串,其中不允许出现'aaa'、'bbb'或'ccc'这样的连续子串。代码示例展示了如何按字母剩余数量从多到少的顺序添加,以避免形成不合法的连续子串。
855

被折叠的 条评论
为什么被折叠?



