import java.util.*;
public class Solution {
    public ArrayList<String> Permutation(String str) {
        ArrayList<String> res = new ArrayList<>() ;
        if(str == null || str.length() == 0) return res ;
        char[] arr = str.toCharArray() ;
        Arrays.sort(arr) ;
        help(arr , new boolean[arr.length] , new StringBuilder() , res) ;
        return res ;
    }
    //使用辅助数组,进行标记
    public void help(char[] arr , boolean[] isV , StringBuilder sb ,ArrayList<String> res) {
        if(sb.length() == arr.length) {
            res.add(sb.toString()) ;
            return ;
        }
        for(int i = 0 ; i < arr.length ; i ++) {
            if(isV[i]) continue ;
            //处理重复的情况
            if(i > 0 && arr[i] == arr[i - 1] && !isV[i - 1]) continue ;
            isV[i] = true ;
            sb.append(String.valueOf(arr[i])) ;
            help(arr , isV , sb , res) ;
            sb.deleteCharAt(sb.length() - 1) ;
            isV[i] = false ;
        }
    }
}