为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

小怪兽爱吃肉 2023-04-19 10:32:58
我正在尝试做这个问题“检查一个字符串是否具有相同数量的'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;  }}
查看完整描述

4 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

您不需要进行任何拆分。除了它不正确(oooxxx例如 try 或OOOxxx)这一事实之外,它相当低效,因为它需要创建新对象。你不需要这样做。


一次只迭代一个字符,检查当前字符是什么,然后递增/递减计数器:


int count = 0;

for (int i = 0; i < str.length(); ++i) {

  switch (str.charAt(i)) {

    case 'o': case 'O':

      count++;

      break;

    case 'x': case 'X':

      count--;

      break;

  }

}

return count == 0;

更喜欢使用索引循环而charAt不是迭代toCharArray(),因为后者会创建一个包含整个字符串的新 char 数组。


查看完整回答
反对 回复 2023-04-19
?
米脂

TA贡献1836条经验 获得超3个赞

您的方法似乎不区分大小写;我将遍历输入中的所有字母String(首先将其转换为小写字母)并计算x和o字符。就像是,


int x = 0, o = 0;

for (char ch : str.toLowerCase().toCharArray()) {

    if (ch == 'x') {

        x++;

    } else if (ch == 'o') {

        o++;

    }

}

return o == x;


查看完整回答
反对 回复 2023-04-19
?
墨色风雨

TA贡献1853条经验 获得超6个赞

实际上有许多不同的方法可以实现这一点:

  • 统计字符串中某个字符出现的次数

    • 命令式方法

    • 使用递归

    • 使用正则表达式

    • 使用 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);

}


查看完整回答
反对 回复 2023-04-19
?
守候你守候我

TA贡献1802条经验 获得超10个赞

你可以做类似的事情

return StringUtils.countMatches(str, "x") == StringUtils.countMatches(str, "o").

为什么要两次发明轮子?让我知道这是否对您有帮助。我没有尝试代码,但它应该可以工作。


查看完整回答
反对 回复 2023-04-19
  • 4 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信