Java中arraylist中字符串中所有字符的组合

时间:2018-03-19 07:31:57

标签: java string arraylist

我有一个字符串的arraylist(大小未知)(字符串长度不一样)。 我需要打印字符串中所有字符的组合(特定条件),不重复。它更像或像是数学中的元素组合。

条件:

  1. 输出字符串长度 - >给定arraylist的大小(在下面的示例中,由于ArrayList大小为3,因此输出字符串的长度应为3)。
  2. 形成的新字符串的每个字符必须从ArrayList中的每个字符串中获取每个字符。
  3. 这是一个例子: 数组列表是示例:["abc", "de", "fg"]

    (输出字符串数:3(第1个字符串的大小)* 2(第2个字符串的大小)* 2(第3个字符串的大小)= 12)

    输出应为:

    ["adf", 
    "adg", 
    "aef", 
    "aeg", 
    "bdf", 
    "bdg", 
    "bef", 
    "beg", 
    "cdf", 
    "cdg", 
    "cef", 
    "ceg"]
    

2 个答案:

答案 0 :(得分:0)

List<String> a = Arrays.asList("a", "b", "c");
List<String> b = Arrays.asList("d", "e");
String[][] AB = a.stream().flatMap(ai -> b.stream().map(bi -> new String[] { ai, bi })).toArray(String[][]::new);
System.out.println(Arrays.deepToString(AB));

答案 1 :(得分:0)

首先,没有人应该为你提供实际的家庭作业代码。

以下是概念性概念的基本概念:

这可以通过(伪代码)递归地完成:

String[] allCombinations(String[] input) {
    if (input is empty) {
        return [ "" ]
    }

    String[] result

    String[] childrenCombinations = allCombinations(input[1:])
    foreach char c in input[0] {
        foreach string s in childrenCombinations {
            result += ( c + s )
        }
    }
    return result
}

当然这是一个非常天真的递归逻辑,有很多不必要的对象创建。但是,它可以让您了解算法的外观。在理解逻辑之后,您可以考虑优化领域