为什么这个布尔值返回 true

Why does this boolean return true

提问人:BigJonna 提问时间:9/1/2021 更新时间:9/1/2021 访问量:66

问:

我正在做一个我通过的编码挑战,但当我看到这个解决方案时,我惊呆了,因为我没有看到这是如何工作的,因为表达式返回 false,但函数 self 返回 true,有人可以向我解释为什么会这样。

这是编码问题

检查字符串是否具有相同数量的“x”和“o”。该方法必须返回布尔值,并且不区分大小写。字符串可以包含任何字符。

示例输入/输出

XO("ooxx") => true
XO("xooxx") => false
XO("ooxXm") => true
XO("zpzpzpp") => true // when no 'x' and 'o' is present should return true
XO("zzoo") => false 

这是我的解决方案

function XO($s) {
  
  $ka = false; 
  
  $s = strtolower($s);
  
  if (strpbrk($s,'x') || strpbrk($s,'o')) {
    
    if (substr_count($s,'x') == substr_count($s,'o')){
      $ka = true;
    }
    
  }
  else {
    $ka = true;
  }
  
  return $ka ;
}

这是其他人发布的解决方案

function SO(string $s):bool {
    return substr_count(strtolower($s),'o')==substr_count(strtolower($s),'x');
}

这确实是我的解决方案,即使字符是“zzz”,它也会返回 true。但是有人怎么能向我解释这一点

PHP 函数 boolean boolean-logic

评论

4赞 aynber 9/1/2021
因为 0 仍然等于 0?
0赞 Álvaro González 9/1/2021
不知道确切的疑问是什么。撇开类型提示和缓存不谈,它几乎和你一样,但它跳过了多余的检查和变量。strtolower()
0赞 AbraCadaver 9/1/2021
即使字符为“zzz”,它也会返回 true,因为计数为 0 就是计数为 0。o==x
0赞 Code4R7 9/2/2021
对我来说,问题最困难的部分似乎是未指定的编码方案。
0赞 BigJonna 9/8/2021
@aynber是的,就是这样,谢谢

答: 暂无答案