1. 题目
2. 思路
(1) 贪心算法
- 每次只添加剩余数量最多的那个字母,若字符串的最后两个字母都是当前字母,则跳过当前字母。
- 只要有字母被添加,则可进入下一轮循环。
3. 代码
import java.util.Arrays;
import java.util.Comparator;
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public String longestDiverseString(int a, int b, int c) {
Pair[] pairs = new Pair[]{new Pair('a', a), new Pair('b', b), new Pair('c', c)};
StringBuilder sb = new StringBuilder();
while (true) {
Arrays.sort(pairs, new Comparator<Pair>() {
@Override
public int compare(Pair o1, Pair o2) {
return Integer.compare(o2.count, o1.count);
}
});
boolean hasNext = false;
for (Pair pair : pairs) {
if (pair.count == 0) {
break;
}
int n = sb.length();
if (n >= 2 && sb.charAt(n - 2) == pair.ch && sb.charAt(n - 1) == pair.ch) {
continue;
}
hasNext = true;
sb.append(pair.ch);
pair.count--;
break;
}
if (!hasNext) {
break;
}
}
return sb.toString();
}
}
class Pair {
public char ch;
public int count;
public Pair(char ch, int count) {
this.ch = ch;
this.count = count;
}
}