Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生成长度为<;=5._Java_Arrays_String_List_Arraylist - Fatal编程技术网

Java 生成长度为<;=5.

Java 生成长度为<;=5.,java,arrays,string,list,arraylist,Java,Arrays,String,List,Arraylist,我有一个Java字符串数组。我想生成一个字符串数组列表,其中包含长度的所有字符串集。您将需要一个K子集算法实现。我确信它们存在于数学图书馆中,或者你可以自己编写代码 S1是您的集合(或字母表),s2是长度为k(5)的子集集合。我想您必须编写自己的生成器,或者使用一些库进行排列/组合,应该有很多数学库可以这样做。下面是自己实现的示例: 在我看来,link中的示例正是您所需要的—只需更改输入数组和长度。作者还将其放在一个字符串中,我发现您希望将其放在数组中,因此输出也应该更改我将为您提供解决此问题

我有一个Java字符串数组。我想生成一个字符串数组列表,其中包含长度的所有字符串集。您将需要一个K子集算法实现。我确信它们存在于数学图书馆中,或者你可以自己编写代码


S1是您的集合(或字母表),s2是长度为k(5)的子集集合。

我想您必须编写自己的生成器,或者使用一些库进行排列/组合,应该有很多数学库可以这样做。下面是自己实现的示例:


在我看来,link中的示例正是您所需要的—只需更改输入数组和长度。作者还将其放在一个字符串中,我发现您希望将其放在数组中,因此输出也应该更改

我将为您提供解决此问题的方法

从空输出字符串开始。逐个将所有字符添加到前缀。对于添加的每个字符,通过递归调用k等于k-1来打印具有当前前缀的所有可能字符串

这里K是案例1到5的长度。

我使用了以下代码:

    ...
    String[] cols = ... //linea in input
    Set<String> subSet= new HashSet<String>();
    Set<Set<String>> sets = new HashSet<Set<String>>();

    //popolo l'insieme - escludo la data
    for(int i=1; i<cols.length; i++){
        subSet.add(cols[i]);
    }


    // creo l'insieme delle parti e popolo
    sets = powerSet(subSet);

 public static Set<Set<String>> powerSet(Set<String> originalSet) {

    Set<Set<String>> sets = new HashSet<Set<String>>();
    if (originalSet.isEmpty()) {
        sets.add(new HashSet<String>());
        return sets;
    }
    List<String> list = new ArrayList<String>(originalSet);
    String head = list.get(0);
    Set<String> rest = new HashSet<String>(list.subList(1, list.size()));
    for (Set<String> set : powerSet(rest)) {
        if(set.size() < 5){
            Set<String> newSet = new HashSet<String>();
            newSet.add(head);
            newSet.addAll(set);
            sets.add(newSet);
            sets.add(set);
        }
    }

    return sets;
}
。。。
字符串[]cols=//输入线
Set subSet=新的HashSet();
Set Set=新的HashSet();
//popolo l'insieme-escludo la data

对于(int i=1;您能澄清一下吗?您已经在2而不是5处停止了。@pbabcdefp-我猜他是手动完成的,希望代码能够完成:)@TheLostMind Ok,但原始数组中只有4个元素。这肯定需要澄清。@pbabcdefp-Ya。。这个我agree@pbabcdefp对不起,我忘了省略号(:
    ...
    String[] cols = ... //linea in input
    Set<String> subSet= new HashSet<String>();
    Set<Set<String>> sets = new HashSet<Set<String>>();

    //popolo l'insieme - escludo la data
    for(int i=1; i<cols.length; i++){
        subSet.add(cols[i]);
    }


    // creo l'insieme delle parti e popolo
    sets = powerSet(subSet);

 public static Set<Set<String>> powerSet(Set<String> originalSet) {

    Set<Set<String>> sets = new HashSet<Set<String>>();
    if (originalSet.isEmpty()) {
        sets.add(new HashSet<String>());
        return sets;
    }
    List<String> list = new ArrayList<String>(originalSet);
    String head = list.get(0);
    Set<String> rest = new HashSet<String>(list.subList(1, list.size()));
    for (Set<String> set : powerSet(rest)) {
        if(set.size() < 5){
            Set<String> newSet = new HashSet<String>();
            newSet.add(head);
            newSet.addAll(set);
            sets.add(newSet);
            sets.add(set);
        }
    }

    return sets;
}