输出要为:
一行,每个组合以空格分隔,相同长度的组合需要以字典序排序,且去重
代码分为三部分第一部分查找符合要求的字符串排列
public static void permu(String s,String t,int m,int start){
if(m<=0)
{
if(!arrayList.contains(t))
arrayList.add(t);
return;
}
if (s.length()-start<m) return;
permu(s,t+s.charAt(start),m-1,start+1);//只考虑当前字符的下一个被用上的情况
//permu(s,t,m,start+1);如果查找不是相邻字符则要加上这一行
}
读取输入并且进入递归函数
public static ArrayList<String> arrayList = new ArrayList<>();
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()){
String s = in.nextLine();
for (int i = 1;i<=s.length();i++)
for (int j = 0;j<s.length();j++)
permu(s,"",i,j);
Collections.sort(arrayList,new StringComparator());
for(int i = 0;i<arrayList.size();i++)
System.out.print(arrayList.get(i)+" ");
}
}
最后要把找出来的ArrayList进行按照长度的字典序排列实习Comparator
private static class StringComparator implements Comparator<String> {
public int compare(String o1, String o2) {
int len1 = o1.length();
int len2 = o2.length();
if (len1 != len2)
return len1 - len2;
else
return o1.compareTo(o2);
}
}
本文介绍了一种通过递归实现的字符串排列算法。该算法可以找出给定字符串的所有可能排列,并确保输出的排列按照字典序排序且去重。文章提供了完整的Java代码实现,包括主函数用于读取输入并调用递归函数,以及自定义比较器用于对结果进行排序。
4768

被折叠的 条评论
为什么被折叠?



