Java 按字母顺序排列每个组合 公共类StringPermutation{ 公共静态列表getPermutation(字符串输入){ 列表集合=null; if(input.length()==1){ collection=newarraylist(); 集合。添加(输入); 回收; }否则{ collection=getPermutation(input.substring(1)); 字符优先=输入。字符(0); 列表结果=新建ArrayList(); for(字符串str:collection){ 对于(int i=0;i

Java 按字母顺序排列每个组合 公共类StringPermutation{ 公共静态列表getPermutation(字符串输入){ 列表集合=null; if(input.length()==1){ collection=newarraylist(); 集合。添加(输入); 回收; }否则{ collection=getPermutation(input.substring(1)); 字符优先=输入。字符(0); 列表结果=新建ArrayList(); for(字符串str:collection){ 对于(int i=0;i,java,performance,permutation,superset,Java,Performance,Permutation,Superset,上面的代码将指定一个字符串。例如,给定cat,它返回[cat,act,atc,cta,tca,tac],这很好,但你们是否可以编辑我的代码,以便它也显示字母的子集,即[cat,act,atc,cta,tca,tac]和[at,ta,tc,ca,ac,ct,a,t 我希望你能理解我的要求。如果你不明白,请告诉我,我会进一步解释。谢谢,我很感激。我认为您可以先生成字母的所有子集,然后为给定子集生成所有排列: public class StringPermutation { publi

上面的代码将指定一个字符串。例如,给定
cat
,它返回[
cat,act,atc,cta,tca,tac
],这很好,但你们是否可以编辑我的代码,以便它也显示字母的子集,即[
cat,act,atc,cta,tca,tac]和[at,ta,tc,ca,ac,ct,a,t


我希望你能理解我的要求。如果你不明白,请告诉我,我会进一步解释。谢谢,我很感激。

我认为您可以先生成字母的所有子集,然后为给定子集生成所有排列:

public class StringPermutation {    
    public static List<String> getPermutation(String input) {
        List<String> collection = null;   
        if (input.length() == 1) {
            collection = new ArrayList<String>();
            collection.add(input);
            return collection;
        } else {
            collection = getPermutation(input.substring(1));
            Character first = input.charAt(0);
            List<String> result = new ArrayList<String>();
            for (String str : collection) {
                for (int i = 0; i < str.length(); i++) {
                    String item = str.substring(0, i) + first
                            + str.substring(i);
                    result.add(item);
                }
                String item = str.concat(first.toString());
                result.add(item);
            }
            return result;
        }
    }

    public static void main(String[] args) {
        List<String> test = StringPermutation.getPermutation ("CAT");
        System.out.println (test);
    }
}
集合子集;
公共void生成子集(字符串当前,字符串左侧){
if(left.length()==0){
子集。添加(当前);
}否则{
生成子串(当前,左。子串(1));
生成子串(当前+左.字符(0),左.子串(1));
}
}
列出所有排列(字符串字){
子集=新的HashSet();
生成子集(“,单词);
列表结果=新建ArrayList();
用于(字符串子集:子集){
addAll(StringPermutation.getPermutation(子集));
}
返回结果;
}
所以如果你有“猫” 子集将是:“,”c“,”a“,”t“,”ca“,”ct“,”tc“,”cat” 然后得到每个子集的排列。

关于效率,这不是最好的解决方案,但您可以改进它。

我认为您可以首先生成字母的所有子集,然后为给定子集生成所有排列:

public class StringPermutation {    
    public static List<String> getPermutation(String input) {
        List<String> collection = null;   
        if (input.length() == 1) {
            collection = new ArrayList<String>();
            collection.add(input);
            return collection;
        } else {
            collection = getPermutation(input.substring(1));
            Character first = input.charAt(0);
            List<String> result = new ArrayList<String>();
            for (String str : collection) {
                for (int i = 0; i < str.length(); i++) {
                    String item = str.substring(0, i) + first
                            + str.substring(i);
                    result.add(item);
                }
                String item = str.concat(first.toString());
                result.add(item);
            }
            return result;
        }
    }

    public static void main(String[] args) {
        List<String> test = StringPermutation.getPermutation ("CAT");
        System.out.println (test);
    }
}
集合子集;
公共void生成子集(字符串当前,字符串左侧){
if(left.length()==0){
子集。添加(当前);
}否则{
生成子串(当前,左。子串(1));
生成子串(当前+左.字符(0),左.子串(1));
}
}
列出所有排列(字符串字){
子集=新的HashSet();
生成子集(“,单词);
列表结果=新建ArrayList();
用于(字符串子集:子集){
addAll(StringPermutation.getPermutation(子集));
}
返回结果;
}
所以如果你有“猫” 子集将是:“,”c“,”a“,”t“,”ca“,”ct“,”tc“,”cat” 然后得到每个子集的排列。

关于效率,这不是最好的解决方案,但你可以改进它。

家庭作业。请贴上这样的标签。顺便说一句,我相信这个问题在这里已经被回答了很多次了,但我建议你试着自己动手(这是hw背后的要点)哈哈,这不是一个家庭作业,我正在创建一个android应用程序。。这只是程序的一部分。我可以发送apk给你测试,但它还没有完成。如果答案是肯定的,你能把这个链接放在作业上吗。请贴上这样的标签。顺便说一句,我相信这个问题在这里已经被回答了很多次了,但我建议你试着自己动手(这是hw背后的要点)哈哈,这不是一个家庭作业,我正在创建一个android应用程序。。这只是程序的一部分。我可以发送apk给你测试,但它还没有完成。如果它被回答了,请你把链接放进去。你是对的,没有效率是导致Java堆外空间错误的原因。我想把它发送到一个文本文件。谢谢,如果你对构建一个高效可靠的android应用程序有什么建议,请告诉我你是对的,效率不高会导致Java堆外空间错误。我想把它发送到一个文本文件。如果你对构建高效可靠的android应用程序有什么建议,请告诉我