1405. 最长快乐字符串_2022_02_07

Posted Ming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1405. 最长快乐字符串_2022_02_07相关的知识,希望对你有一定的参考价值。

难度:中等|贪心

1405. 最长快乐字符串

如果字符串中不含有任何 \'aaa\'\'bbb\'\'ccc\' 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。

给你三个整数 abc,请你返回 任意一个 满足下列全部条件的字符串 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

Solution

尽可能多的使用当前的字母,每次切换,则去选择剩余最多的字母即可

​func longestDiverseString(a int, b int, c int) string 
    ans := []byte
    cnt := []structc 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)
        

    

本文来自博客园,作者:StimuMing,转载请注明原文链接:https://www.cnblogs.com/fole-del/p/15867004.html

以上是关于1405. 最长快乐字符串_2022_02_07的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 1405 最长快乐字符串[贪心] HERODING的LeetCode之路

P1807 最长路_NOI导刊2010提高(07)

P1807 最长路_NOI导刊2010提高(07)

洛谷 P1807 最长路_NOI导刊2010提高(07)

leetcode_字节跳动_挑战字符串_最长公共前缀

tony_nginx_02_URL重写