Форумы портала PHP.SU » PHP » Программирование на PHP » Заменить повторяющиеся символы на следущую букву алфавита

Страниц (1): [1]
 

1. Anastasi - 10 Сентября, 2021 - 10:13:37 - перейти к сообщению
Дана строка, которая состоит из букв латинского алфавита в
нижнем регистре. Реализуйте следующий алгоритм. Если в строке
есть две «одинаковые» буквы, они заменяются одной следующей
для них буквой алфавита.

"aa" => "b", "bb" => "c", .. "zz" => "a".

Заменяемые символы не обязательно смежные. Эта операция
повторяется до тех пор, пока в строке не останется повторяющихся
букв. Порядок символов не важен.

"zzzab"
"azab"
"bzb"
"cz" // return



Моя попытка:

<?php
$str = "zzzab";
$alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
$str = preg_split("//u", $str);
$arr = [];

foreach ($str as $v) {
if (in_array($v, $arr))
continue;
$arr[] = $v;
}

$str = implode($arr);
print_r ($str);

вроде удалила первые символы но заменить не смогла.
2. don.bidon - 10 Сентября, 2021 - 13:01:25 - перейти к сообщению
Так заменять и не пытались )
Посимвольно бегите по строке, помня предыдущий символ, если предыдущий символ совпадает с текущим, делайте замену и начинайте сканирование заново.
Или требуют изящного решения?
3. Anastasi - 10 Сентября, 2021 - 19:45:08 - перейти к сообщению
don.bidon пишет:
Так заменять и не пытались )
Посимвольно бегите по строке, помня предыдущий символ, если предыдущий символ совпадает с текущим, делайте замену и начинайте сканирование заново.
Или требуют изящного решения?



Не пыталась так как вообще не понимаю как) Вот прошу помощи. Ваши слова мне понятны но как написать код не знаю, очень плохо разбираюсь в языке пока
4. don.bidon - 10 Сентября, 2021 - 21:09:04 - перейти к сообщению
Давайте постепенно, https://www.php.net/manual/ru/fu...ction.substr.php
5. Vladimir Kheifets - 12 Сентября, 2021 - 07:29:38 - перейти к сообщению
Anastasi пишет:
Дана строка, которая состоит из букв латинского алфавита в
нижнем регистре. Реализуйте следующий алгоритм. Если в строке
есть две «одинаковые» буквы, они заменяются одной следующей
для них буквой алфавита.
"aa" => "b", "bb" => "c", .. "zz" => "a".
Заменяемые символы не обязательно смежные. Эта операция
повторяется до тех пор, пока в строке не останется повторяющихся
букв. Порядок символов не важен.

"zzzab"
"azab"
"bzb"
"cz" // return


Добрый день!
Вопрос по постановке задачи:
Так должны заменятся две «одинаковые» смежные буквы:
Цитата:
"aa" => "b", "bb" => "c", .. "zz" => "a".

Как быть с этим: "Заменяемые символы не обязательно смежные"?
Например: "aca"
Удачи!

 

Powered by ExBB FM 1.0 RC1