#php #function #boolean #boolean-logic
Вопрос:
Я выполнял задачу по кодированию, которую я прошел, но когда я увидел это решение, я был ошеломлен, потому что я не видел, как это может сработать, потому что выражение возвращает 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');
}
И это делает решение as mine, даже если персонаж «zzz», он возвращает значение true. Но как кто-нибудь может мне это объяснить
Комментарии:
1. Потому что 0 все еще равно 0?
2. Не уверен, в чем именно заключается сомнение. Помимо подсказок и
strtolower()
кэширования, это почти то же самое, что и вы, но оно пропускает избыточные проверки и переменные.3. даже если символ «zzz», он возвращает значение true , потому что количество
o
0 равно==
количествуx
0.4. Мне кажется, что самой сложной частью проблемы является неуказанная схема кодирования.
5. @айнбер да, это было так, спасибо