Рубрики

Распечатать все перестановки строки в Java

Учитывая строку str , задача состоит в том, чтобы напечатать все перестановки str . Перестановка — это расположение всего или части набора объектов с учетом порядка расположения. Например, слова «летучая мышь» и «табуляция» представляют две различные перестановки (или расположения) аналогичного трехбуквенного слова.

Примеры:

Input: str = “cd”
Output: cd dc

Input: str = “abb”
Output: abb abb bab bba bab bba

Подход: напишите рекурсивную функцию, которая печатает каждую перестановку данной строки. Условие завершения будет, когда переданная строка пуста.

Ниже приведена реализация вышеуказанного подхода:

// Java-программа для печати всех перестановок
// данной строки

public class GFG {

  

    // Функция для печати всех перестановок str

    static void printPermutn(String str, String ans)

    {

  

        // Если строка пуста

        if (str.length() == 0) {

            System.out.print(ans + " ");

            return;

        }

  

        for (int i = 0; i < str.length(); i++) {

  

            // i-й символ строки

            char ch = str.charAt(i);

  

            // Остальная часть строки после исключения

            // i-й символ

            String ros = str.substring(0, i) + 

                         str.substring(i + 1);

  

            // Рекурсивный вызов

            printPermutn(ros, ans + ch);

        }

    }

  

    // Код драйвера

    public static void main(String[] args)

    {

        String s = "abb";

        printPermutn(s, "");

    }

}

Выход:

abb abb bab bba bab bba

Когда перестановки должны быть четкими.

Примеры:

Input: str = “abb”
Output: abb bab bba

Input: str = “geek”
Output: geek geke gkee egek egke eegk eekg ekge ekeg kgee kege keeg

Подход: напишите рекурсивную функцию, которая печатает различные перестановки. Создайте логический массив размером «26», который учитывает используемый символ. Если символ не использовался, произойдет рекурсивный вызов. В противном случае не звоните. Условие завершения будет, когда переданная строка пуста.

Ниже приведена реализация вышеуказанного подхода:

// Java-программа для печати всех перестановок
// данной строки

public class GFG {

  

    // Функция для печати всех различных

    // перестановки str

    static void printDistinctPermutn(String str, 

                                     String ans)

    {

  

        // Если строка пуста

        if (str.length() == 0) {

  

            // распечатать ответ

            System.out.print(ans + " ");

            return;

        }

  

        // Создаем логический массив размером 26, который

        // сохраняет false по умолчанию и делает true

        // в позиции, в которой находится алфавит

        // используемый

        boolean alpha[] = new boolean[26];

  

        for (int i = 0; i < str.length(); i++) {

  

            // i-й символ строки

            char ch = str.charAt(i);

  

            // Остальная часть строки после исключения

            // i-й символ

            String ros = str.substring(0, i) + 

                         str.substring(i + 1);

  

            // Если персонаж не использовался

            // тогда произойдет рекурсивный вызов.

            // Иначе рекурсивного не будет

            // вызов

            if (alpha[ch - 'a'] == false)

                printDistinctPermutn(ros, ans + ch);

            alpha[ch - 'a'] = true;

        }

    }

  

    // Код драйвера

    public static void main(String[] args)

    {

        String s = "geek";

        printDistinctPermutn(s, "");

    }

}

Выход:

geek geke gkee egek egke eegk eekg ekge ekeg kgee kege keeg

Рекомендуемые посты:

Распечатать все перестановки строки в Java

0.00 (0%) 0 votes