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 数组。
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;
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);
}
TA贡献1802条经验 获得超10个赞
你可以做类似的事情
return StringUtils.countMatches(str, "x") == StringUtils.countMatches(str, "o")
.
为什么要两次发明轮子?让我知道这是否对您有帮助。我没有尝试代码,但它应该可以工作。
添加回答
举报