跳至正文

每日一题——(已摆烂)1405. 最长快乐字符串

1405. 最长快乐字符串

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

给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件的字符串 s:

s 是一个尽可能长的快乐字符串。
s 中 最多 有a 个字母 ‘a’、b 个字母 ‘b’、c 个字母 ‘c’ 。
s 中只含有 ‘a’、’b’ 、’c’ 三种字母。
如果不存在这样的字符串 s ,请返回一个空字符串 “”。


这题我知道要贪心

我大概的想法是每轮判断谁的数量还大于2

如果有多个大于2 就先插最多的 插2个 然后再插三个中数量最少的 插1个

减完之后重新判断一次

多次应该能正好放完

但是我想完之后发现if不能很好的解决这个问题

因为情况太多种了 反而不好去分析

最后无奈投降了

public class Solution {
    public string LongestDiverseString(int a, int b, int c) {
        StringBuilder res = new StringBuilder();
        Pair[] arr = {new Pair(a, 'a'), new Pair(b, 'b'), new Pair(c, 'c')};
        
        while (true) {
            Array.Sort(arr, (p1, p2) => p2.Freq - p1.Freq);
            bool hasNext = false;
            foreach (Pair pair in arr) {
                if (pair.Freq <= 0) {
                    break;
                }
                int m = res.Length;
                if (m >= 2 && res[m - 2] == pair.Ch && res[m - 1] == pair.Ch) {
                    continue;
                }
                hasNext = true;
                res.Append(pair.Ch);
                pair.Freq--;
                break;
            }
            if (!hasNext) {
                break;
            }
        }
      
        return res.ToString();
    }

    class Pair {
        public int Freq { get; set; }
        public char Ch { get; set; }

        public Pair(int Freq, char Ch) {
            this.Freq = Freq;
            this.Ch = Ch;
        }
    }
}

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/longest-happy-string/solution/zui-chang-kuai-le-zi-fu-chuan-by-leetcod-5nde/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

发表评论

您的电子邮箱地址不会被公开。