Мне нужно построить функцию - я не знаю, если это уже существует на PHP - создать столько уникальных перестановок букв для данного слова. Возьмем этот пример:
#English
word: hello
output: HEllo, HEEllo, HEELlo, HEELLo, HELLO, Hello, HeLlo, HeLLo and so on
#Spanish
word: hola
output: hola, Hola, HOla, HOLa, HOLA, hOla, hOLa, hOLA and so on
Как я могу это достичь? Может ли кто-нибудь предоставить мне алгоритм для достижения этого?
ПРИМЕЧАНИЕ. Имейте в виду, что слова могут быть на английском или испанском!
Потенциальный подход как следующий (в псевдокоде):
counter
be 2 для мощности длины строки. (Пример: "привет" - 5 символов, а counter
- 32).counter-1
, сгенерировать двоичное представление этого целого числа в длину строки. (IE/for word "hello" - это цикл от "00000" до "11111".Код:
function permutationWords($input) {
$input = strtolower($input);
$results = [];
$length = strlen($input);
$counter = pow(2, $length);
for($i=0; $i<$counter; $i++) {
$binaryStr = str_pad(decbin($i), $length, '0', STR_PAD_LEFT);
$variant = '';
for($j=0; $j<$length; $j++) {
$variant .= ($binaryStr[$j] == '1') ? strtoupper($input[$j]) : $input[$j];
}
$results[] = $variant;
}
return $results;
}
Есть определенная возможность для оптимизации или даже более эффективного подхода (ов).