输入numA和numB,要求生成字符串,结果为numA个a和numB个b,不能出现连续三个一样的字符
例如:numA为4,numB为1,最后生成结果是aabaa
贪心算法思想
public String generateString(int numA, int numB) {
StringBuilder result = new StringBuilder();
while (numA > 0 || numB > 0) {
int len = result.length();
// 检查末尾是否已经有两个相同的字符
boolean canAddA = true;
boolean canAddB = true;
if (len >= 2) {
char lastChar = result.charAt(len - 1);
char secondLastChar = result.charAt(len - 2);
if (lastChar == 'a' && secondLastChar == 'a') {
canAddA = false; // 不能添加 'a',否则会形成 "aaa"
}
if (lastChar == 'b' && secondLastChar == 'b') {
canAddB = false; // 不能添加 'b',否则会形成 "bbb"
}
}
// 根据可用性和数量决定添加哪个字符
if (canAddA && canAddB) {
// 两种字符都可以添加,选择数量多的
if (numA >= numB) {
result.append('a');
numA--;
} else {
result.append('b');
numB--;
}
} else if (canAddA) {
// 只能添加 'a'
result.append('a');
numA--;
} else if (canAddB) {
// 只能添加 'b'
result.append('b');
numB--;
} else {
// 两种字符都不能添加,说明无法构造(理论上不会发生)
return "";
}
}
return result.toString();
}
浙公网安备 33010602011771号