Создать перестановку каждой буквы в верхнем / нижнем из заданного слова

1

Мне нужно построить функцию - я не знаю, если это уже существует на 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 

Как я могу это достичь? Может ли кто-нибудь предоставить мне алгоритм для достижения этого?

ПРИМЕЧАНИЕ. Имейте в виду, что слова могут быть на английском или испанском!

  • 0
    Это называется перестановкой ... Я думаю, что смогу помочь вам немного позже. Я создал вполне алгоритм для другого пользователя здесь. Я сейчас свяжу свой ответ. stackoverflow.com/questions/33989174/...
  • 0
    @ VIDesignz Пожалуйста, напишите ответ, когда вы можете, я отредактировал сообщение и изменил неправильное слово, тем временем я проверю сообщение, которое вы оставляете мне
Показать ещё 1 комментарий
Теги:
algorithm

1 ответ

3
Лучший ответ

Потенциальный подход как следующий (в псевдокоде):

  • предположение: вход был только на английском языке, а в нижнем регистре.
  • Разработайте длину строки и создайте интегратор counter be 2 для мощности длины строки. (Пример: "привет" - 5 символов, а counter - 32).
  • цикл от 0 до counter-1, сгенерировать двоичное представление этого целого числа в длину строки. (IE/for word "hello" - это цикл от "00000" до "11111".
  • каждая итерация, сопоставьте слово с двоичным представлением текущего счета, преобразуйте символ в верхний регистр, когда он имеет "1" в своем положении. (Пример: на 4-й итерации 00011 результатом должен быть "helLO")

Код:

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;
}

PhpFiddle

Есть определенная возможность для оптимизации или даже более эффективного подхода (ов).

  • 0
    Вы заметили мою записку в OP? Вокруг слов на испанском и / или английском?
  • 0
    не работает для испанских слов: - \ вы можете взглянуть на это?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню