Проверьте код, который я пробовал
Мой вопрос немного отличается от других. Я хочу сделать эффективный код для палиндрома. Итак, я добавил некоторые ограничения. Ограничения: Нет сохранения строки в какой-либо дополнительной переменной. Используйте только один цикл. Я пробовал это в php, но он не рендерит вывод. Я использовал ту же логику на изображении. Я новичок в php. Мне нужна помощь, чтобы проверить правильность моего кода, если он неправильный, какие изменения могут быть внесены? Независимо от того, является ли это php или любым другим языком oops, мне просто нужно проверить правильность моей логики.
Код PHP:
class user{
public function __construct(){
$this->palindrome();
}
public function palindrome(){
str ="abba";
i=0;
while(str[i] == str[strlen(str-1)-i])
{
i++;
}
if(i > strlen(str)/2)
{
return 0;
}
}}
$obj = new user;
Сохраняя свою логику, исправил синтаксические ошибки.
<?php
class user {
public function __construct() {
if ($this->palindrome()) {
echo 'Yes, Palindrome';
} else {
echo 'Not a palindrome';
}
}
public function palindrome() {
//Need $ symbol
$str = "abba";
$i = 0;
// \/
while ($str[$i] == $str[strlen($str) - ($i + 1)]) {
$i++;
if ($i > strlen($str) / 2) {
return 1;
}
}
return 0;
}
}
;
$obj = new user();
Несколько мелких ошибок:
str[strlen(str-1)-i]
=> str[strlen(str)-1-i])
И вы не прекращаете цикл, когда проверка завершена.
Вы можете переместить оператор if в цикл и вернуть true.
Или используйте цикл for 0 -> length / 2 и возвращайте false, если символы не равны.
Я изменил структуру, но сохранил твою логику.
<?php
class User {
private $str;
public function __construct($str) {
$this->str = $str;
}
public function palindrome() {
$i = 0;
while ($this->str[$i] == $this->str[strlen($this->str) - ($i + 1)]) {
$i++;
if ($i > strlen($this->str) / 2) {
return 1;
}
}
return 0;
}
}
$obj = new User("abba");
echo $obj->palindrome(); // can be zero or one