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(); }