输入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();
}
posted @ 2026-04-03 15:53  MarkLeeBYR  阅读(1)  评论(0)    收藏  举报