暴力递归+分支限界 。不知道关动态规划啥事……
字典序问题搞了个小根堆。

import java.util.*;
public class Solution {
    public ArrayList<String> Permutation(String str) {
        ArrayList<String> result=new ArrayList<String>();
        PriorityQueue<String> queue=new PriorityQueue<>(16);
        process(str.toCharArray(),queue,0);
        while (!queue.isEmpty()){
            result.add(queue.poll());
        }


        return result;
    }

    //子序列 暴力递归写法
    // index-length 位置所有排列
    public void process(char[] str,PriorityQueue<String> res,int index){
        if(index==str.length){
            res.add(String.valueOf(str));
            return;
        }
        //分支限界
        boolean[] visit=new boolean[26];
        for(int i=index;i<str.length;i++){
            if(!visit[str[i]-'a']){
              visit[str[i]-'a']=true;
              swap(str,i,index);
              process(str,res,index+1);
              swap(str,i,index);
            }

        }
    }

    public void swap(char[] arr,int i,int j){
        char tmp=arr[i];
        arr[i]=arr[j];
        arr[j]=tmp;
    }
}