class Solution {
public:
string longestDiverseString(int a, int b, int c) {
}
};
1405. 最长快乐字符串
如果字符串中不含有任何 'aaa'
,'bbb'
或 'ccc'
这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。
给你三个整数 a
,b
,c
,请你返回 任意一个 满足下列全部条件的字符串 s
:
s
是一个尽可能长的快乐字符串。s
中 最多 有a
个字母 'a'
、b
个字母 'b'
、c
个字母 'c'
。s
中只含有 'a'
、'b'
、'c'
三种字母。如果不存在这样的字符串 s
,请返回一个空字符串 ""
。
示例 1:
输入:a = 1, b = 1, c = 7 输出:"ccaccbcc" 解释:"ccbccacc" 也是一种正确答案。
示例 2:
输入:a = 2, b = 2, c = 1 输出:"aabbc"
示例 3:
输入:a = 7, b = 1, c = 0 输出:"aabaa" 解释:这是该测试用例的唯一正确答案。
提示:
0 <= a, b, c <= 100
a + b + c > 0
原站题解
javascript 解法, 执行用时: 56 ms, 内存消耗: 43.7 MB, 提交时间: 2022-11-28 14:02:41
/** * @param {number} a * @param {number} b * @param {number} c * @return {string} */ var longestDiverseString = function(a, b, c) { const res = []; const arr = [[a, 'a'], [b, 'b'], [c, 'c']]; while (true) { arr.sort((a, b) => b[0] - a[0]); let hasNext = false; for (const [i, [c, ch]] of arr.entries()) { if (c <= 0) { break; } const m = res.length; if (m >= 2 && res[m - 2] === ch && res[m - 1] === ch) { continue; } hasNext = true; res.push(ch); arr[i][0]--; break; } if (!hasNext) { break; } } return res.join(''); };
golang 解法, 执行用时: 4 ms, 内存消耗: 2 MB, 提交时间: 2022-11-28 14:02:25
func longestDiverseString(a, b, c int) string { ans := []byte{} cnt := []struct{ c int; ch byte }{{a, 'a'}, {b, 'b'}, {c, 'c'}} for { sort.Slice(cnt, func(i, j int) bool { return cnt[i].c > cnt[j].c }) hasNext := false for i, p := range cnt { if p.c <= 0 { break } m := len(ans) if m >= 2 && ans[m-2] == p.ch && ans[m-1] == p.ch { continue } hasNext = true ans = append(ans, p.ch) cnt[i].c-- break } if !hasNext { return string(ans) } } }
python3 解法, 执行用时: 32 ms, 内存消耗: 14.9 MB, 提交时间: 2022-11-28 14:02:06
class Solution: def longestDiverseString(self, a: int, b: int, c: int) -> str: ans = [] cnt = [[a, 'a'], [b, 'b'], [c, 'c']] while True: cnt.sort(key=lambda x: -x[0]) hasNext = False for i, (c, ch) in enumerate(cnt): if c <= 0: break if len(ans) >= 2 and ans[-2] == ch and ans[-1] == ch: continue hasNext = True ans.append(ch) cnt[i][0] -= 1 break if not hasNext: return ''.join(ans)