Вчера был мой 67-й день кодинга. я решил один вопрос

Проблема: перестановки заданной строки

Дана строка S. Задача состоит в том, чтобы вывести все уникальные перестановки заданной строки в лексикографически отсортированном порядке.

Пример 1:

Input: ABC
Output:
ABC ACB BAC BCA CAB CBA
Explanation:
Given string ABC has permutations in 6 
forms as ABC, ACB, BAC, BCA, CAB and CBA .

Пример 2:

Input: ABSG
Output:
ABGS ABSG AGBS AGSB ASBG ASGB BAGS 
BASG BGAS BGSA BSAG BSGA GABS GASB 
GBAS GBSA GSAB GSBA SABG SAGB SBAG 
SBGA SGAB SGBA
Explanation:
Given string ABSG has 24 permutations.

Ваша задача.
Вам не нужно ничего читать или печатать. Ваша задача — завершить функцию find_permutaion(), которая принимает строку S в качестве входного параметра и возвращает вектор строки в лексикографическом порядке.

Ожидаемая временная сложность:O(n! * n)

Ожидаемая сложность пространства:O(n)

Решение (в Java):

Основной подход заключается в использовании рекурсии и возврата.

class Solution {

    List<String> hs= new ArrayList<>();
    public List<String> find_permutation(String S) {
     
        permutation(0, S);
        Collections.sort(hs);
            
        return hs;
    }
    public void permutation(int index, String s){
        if(index==s.length()-1)
    {
        if(!hs.contains(s))
    hs.add(s);
    return;
        }  
        for(int i=index; i<s.length(); i++){
            s=swap(s, i, index);
            permutation(index+1,s );
            s=swap(s, i, index);
            
        }
    }
    public String swap(String s, int a, int b){
        char ch[]= s.toCharArray();
        char p=ch[a];
        ch[a]= ch[b];
        ch[b]= p;
        return String.valueOf(ch);
    }
}