链接:https://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7
来源:牛客网
字符串的排序
解题思路:1.前求出所有的字符串 2.再进行字典序排序3.再去重
1.求出所有的字符串---动态规划思想
abc的全排列是在ab的全排列结果【“ab”,“ba”】的基础上增加c得到
拿ab举例:ab 的长度为2,则c由三个位置,分别为0,1,2来插入到“ab”中
此时将c的位置用j表示,“ab”用s表示,则新的字符串str=s.substring(0,j)+c+s.substring(j,s.length());
这样可以用几乎遍历的方式求出所有的字符串
2.利用HashSet进行去重
HashSet set=new HashSet(ret_new);
ret_new.clear();
ret_new.addAll(set);
3.利用sort方法进行字典序排序
Collections.sort(ret_new);
最后整体的java实现代码如下:
import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; public class Solution { public ArrayList<String> Permutation(String str) { ArrayList<String> ret=new ArrayList(); int n=str.length(); if(n==0) return ret; ret.add(str.substring(0,1)); for(int i=1;i<n;i++){ ArrayList<String> ret_new=new ArrayList(); for(String s:ret){ // char ch=(char)str.indexOf(i); for(int j=0;j<=s.length();j++){ String tmp=s.substring(0,j)+str.substring(i,i+1)+s.substring(j,s.length()); ret_new.add(tmp); } } HashSet set=new HashSet(ret_new); ret_new.clear(); ret_new.addAll(set); Collections.sort(ret_new); ret=ret_new; } return ret; } }