984. 不含 AAA 或 BBB 的字符串
emmm 很遗憾超时间了
public String strWithout3a3b(int A, int B) {
StringBuffer str = new StringBuffer("");
int i = A + B;
while (true) {
if (str.length() == i)
break;
else {
if (str.length() >= 2) {
if (str.charAt(str.length() - 1) == str.charAt(str.length() - 2)) {
if (str.charAt(str.length() - 1) == 'a') {
str .append("b") ;
B--;
}
else if(str.charAt(str.length() - 1) == 'b'){
str.append("a");
A--;
}
}
}
if (A > B) {
str.append("a");
A--;
}
else {
str.append("b");
B--;
}
}
}
return str.toString();
}
优化后
public String strWithout3a3b(int A, int B) {
StringBuffer str = new StringBuffer("");
int i = A + B;
while (i>0) {
if (str.length() == i)
break;
if (A >= B) {
str.append("a");
A--;
}
else {
str.append("b");
B--;
}
if (str.length() == i)
break;
if (str.length() >= 2 &&str.charAt(str.length() - 1) == str.charAt(str.length() - 2)) {
if (str.charAt(str.length() - 1) == 'a') {
str .append("b") ;
B--;
}
else{
str.append("a");
A--;
}
}
}
return str.toString();
}
再次修改
分成两步 一步是判断是否已经是两个连接同样的字母在一起了 ,另一步则是添加
public String strWithout3a3b(int A, int B) {
StringBuffer str = new StringBuffer("");
while (A + B > 0) {
if (str.length() >= 2 && str.charAt(str.length() - 1) == str.charAt(str.length() - 2)) {
if (str.charAt(str.length() - 1) == 'a') {
str.append("b");
B--;
} else {
str.append("a");
A--;
}
} else {
if (A >= B) {
str.append("a");
A--;
} else {
str.append("b");
B--;
}
}
}
return str.toString();
}
}
第二种不会超时
public String strWithout3a3b(int A, int B) {
StringBuffer str = new StringBuffer("");
int i = A + B;
while (A>0||B>0) {
boolean bol = false;
if (str.length() == i)
break;
else {
if (str.length() >= 2 && str.charAt(str.length() - 1) == str.charAt(str.length() - 2)) {
if (str.charAt(str.length() - 1) == 'b') {
bol = true;
}
}
else {
if(A >= B)
bol = true;
}
if (bol) {
str.append("a");
A--;
}
else {
str.append("b");
B--;
}
}
}
return str.toString();
}