首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从具有特定元素的大集合中查找所有顺序子集

从具有特定元素的大集合中查找所有顺序子集
EN

Stack Overflow用户
提问于 2016-08-23 13:13:01
回答 2查看 579关注 0票数 1

问题的定义如下:输入元素,假设m

大集合,假定{a,b,c,d,..z}

我想要找到所有的子集长度范围从2-5元素包含输入字,m.条件:元素的顺序应该保持不变。

输出:

  • {l,m},{m,n},
  • {k,l,m},{l,m,n},{m,n,o},
  • ……{j,k,l,m},{k,l,m,n},{l,m,n,o},{m,n,o,p}。诸若此类

我能够通过以下代码从输入单词开始获得子集:

代码语言:javascript
复制
    ArrayList<String> phrases = new ArrayList<>();

    for (int j=1; j<=k-i; j++)  {
        String newSet = set[i] +" ";
        for (int x=1; x<=j; x++)    {
            newSet=newSet+set[i+x]+" ";
        }
        phrases.add(newSet.trim());
    }
    return phrases;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-23 15:54:29

正如另一个答复和评论所指出的,

  1. 首先获取输入单词的索引
  2. 将集合的子列表从输入单词的左边和右边取下来,递增一步,直到到达它们各自的末端(列表的第一个和最后一个元素),或者直到达到最大长度( 5 )为止。
  3. 您应该期望一个包含字符串的列表。 私有静态List getSubSet(List set,String word){ List词组=新ArrayList<>();int indexOfWord = set.indexOf(word);int len = 1;而(indexOfWord-len>=0而兴indexOfWord+len<=set.size()){ if (indexOfWord-len>=0) phrases.add(set.subList(indexOfWord-len,indexOfWord+1));if (indexOfWord+len4)中断;}返回短语;} 为了查看一个示例测试用例,我使用了与您一样的单个元素字符串: String[] list= Arrays.asList("a“、"b”、"c“、"d”、"e“、"f”、"g“、"h”、"i“、"j");字符串inWord = "c";List>短语=getSubSet(列表,inWord);for(列表p:短语){ System.out.println(p);}}

产出如下:

代码语言:javascript
复制
[b, c]
[c, d]
[a, b, c]
[c, d, e]
[c, d, e, f]
[c, d, e, f, g]
票数 0
EN

Stack Overflow用户

发布于 2016-08-23 13:40:06

您可以这样写:“元素的顺序应该保持不变”。所以,我假设您不是指集合,因为集合没有顺序,而是类似于列表和序列。

我的建议是:先找到长度为2的序列,然后是长度为3的序列,以此类推。这可以做,让我们假设长度4的方式如下。在大的“集合”中找到输入m的索引。然后从以m作为结果的第一个元素的序列开始。我是jklm。将“窗口”向右移动一步,直到找到的序列以m开始。所以,你得到了klmnlmnomnop

这可以通过将当前查找序列的开始作为索引来实现。它必须以m -4作为当前长度加1的索引进行初始化,然后必须迭代4次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39102260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档