如果字符串中不含有任何'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

Python:

class Solution:
    def longestDiverseString(self, a: int, b: int, c: int) -> str:
        result = ""
        arr = "abc"
        lis = []
        if a:   lis.append(['a', a])
        if b:   lis.append(['b', b])
        if c:   lis.append(['c', c])
        while lis:
            lis.sort(key=(lambda x: x[1]))
            temp = lis.pop()
            if len(result) >= 2 and temp[0] == result[-1] and temp[0] == result[-2]:
                if lis:
                    new = lis.pop()
                    result += new[0]
                    new[1] -= 1
                    if new[1] > 0:
                        lis.append(new)
                else:
                    return result
            else:
                temp[1] -= 1
                result += temp[0]
            if temp[1] > 0:
                lis.append(temp)
        return result

Java;

class Solution {
    public String longestDiverseString(int a, int b, int c) {
        String s = "abc";
        Integer[][] arr = {{0,a}, {1,b}, {2,c}};
        StringBuilder result = new StringBuilder();
        List<Integer[]> lis = new ArrayList<>();
        for(Integer[] t: arr)
        {
            if(t[1] > 0)
                lis.add(t);
        }
        while(!lis.isEmpty())
        {
            lis.sort((x, y)->x[1]-y[1]);
            Integer[] new1 = lis.remove(lis.size()-1);
            int n = result.length();
            char ch = s.charAt(new1[0]);
            if(n >= 2 && result.charAt(n-1) == ch && result.charAt(n-2) == ch)
            {
                if(!lis.isEmpty())
                {
                    Integer[] new2 = lis.remove(lis.size()-1);
                    if(new2[1] > 0)
                    {
                        new2[1]--;
                        result.append(s.charAt(new2[0]));
                        if(new2[1] > 0)
                            lis.add(new2);
                    }
                }
                else
                    return result.toString();
            }
            else
            {
                new1[1]--;
                result.append(s.charAt(new1[0]));
            }
            if(new1[1] > 0)
                lis.add(new1);
        }
        return result.toString();
    }
}

2.使用优先队列
Python:

Java:

最后修改日期: 2022年2月7日

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。