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