猿问

如果 x 和 o 的数量相同,如何改进返回布尔值的函数

我正在尝试做这个问题“检查一个字符串是否具有相同数量的'x'和'o'。该方法必须返回一个布尔值并且不区分大小写。该字符串可以包含任何字符。”


但是我没有通过一些测试,所以我想知道是否有更好的方法来做到这一点?


public class XO {


  public static boolean getXO (String str) {

  boolean Boolean = false;

    String[] x = str.split("x");

    String[] o = str.split("o");

    // Good Luck!!

    if(x.length == o.length){

    Boolean = true;

    }

    return Boolean;

  }

}


小怪兽爱吃肉
浏览 150回答 4
4回答

慕沐林林

您不需要进行任何拆分。除了它不正确(oooxxx例如 try 或OOOxxx)这一事实之外,它相当低效,因为它需要创建新对象。你不需要这样做。一次只迭代一个字符,检查当前字符是什么,然后递增/递减计数器:int count = 0;for (int i = 0; i < str.length(); ++i) {&nbsp; switch (str.charAt(i)) {&nbsp; &nbsp; case 'o': case 'O':&nbsp; &nbsp; &nbsp; count++;&nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; case 'x': case 'X':&nbsp; &nbsp; &nbsp; count--;&nbsp; &nbsp; &nbsp; break;&nbsp; }}return count == 0;更喜欢使用索引循环而charAt不是迭代toCharArray(),因为后者会创建一个包含整个字符串的新 char 数组。

米脂

您的方法似乎不区分大小写;我将遍历输入中的所有字母String(首先将其转换为小写字母)并计算x和o字符。就像是,int x = 0, o = 0;for (char ch : str.toLowerCase().toCharArray()) {&nbsp; &nbsp; if (ch == 'x') {&nbsp; &nbsp; &nbsp; &nbsp; x++;&nbsp; &nbsp; } else if (ch == 'o') {&nbsp; &nbsp; &nbsp; &nbsp; o++;&nbsp; &nbsp; }}return o == x;

墨色风雨

实际上有许多不同的方法可以实现这一点:统计字符串中某个字符出现的次数命令式方法使用递归使用正则表达式使用 Java 8 特性使用第三方库(特别是 Apache Commons 或 Spring Framework)这个例子是我可能会尝试的(至少作为“优化”之前的第一次削减):public static boolean isSameXOCount (String str) {  int ctX = 0, ctO = 0;  for (int i=0; i < str.length; i++) {    char c = str.charAt(i);    if (c == 'X' || c == 'x')      ctX++;    else if (c == 'O' || c == 'o')      ctO++;  }  return ctX == ct);}

守候你守候我

你可以做类似的事情return StringUtils.countMatches(str, "x") == StringUtils.countMatches(str, "o").为什么要两次发明轮子?让我知道这是否对您有帮助。我没有尝试代码,但它应该可以工作。
随时随地看视频慕课网APP

相关分类

Java
我要回答