【问题标题】:Combinations of all characters in strings in an arraylist in Java, Set multiplication [closed]Java中arraylist中字符串中所有字符的组合,设置乘法[关闭]
【发布时间】:2018-08-27 16:58:06
【问题描述】:

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

条件:

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

这是一个例子: 数组列表示例:["abc", "de", "fg"]

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

输出应该是:

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

【问题讨论】:

  • 您好,欢迎您!请提供更多信息和您的代码 - 到目前为止您尝试了什么以及您的具体问题是什么?
  • "没有重复,没有重复。"你知道吗,就像你的例子一样,所有的字母都是独一无二的?
  • 我没有尝试任何代码,因为我无法编写算法。
  • 基本上是单词中字母的Cartesian product
  • 字符串中的所有字母不必也不会是唯一的。我的意思是说,在形成一个新字符串时,从数组列表中的每个字符串中取出每个字符。打印所有组合

标签: java string arraylist


【解决方案1】:

首先,没有人应该给你实际的作业代码。

这是关于它在概念上的基本概念:

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

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
}

当然,这是一个非常幼稚的递归逻辑,有很多不必要的对象创建。然而,它让您了解算法的外观。理解逻辑后你可能会想到优化的领域

【讨论】:

  • 有兴趣了解拒绝投票的原因。仅仅因为我给出了一个有效的算法但没有实际的 Java 代码?
  • String[] childrenCombinations = allCombinations(input[1:]) -- 在上面的行中,你能帮我解决一下 allCombinations(input[1:]) -> 这是什么 (input[1 :]) 表示?
  • @Raghavendra 它是创建子列表的常用符号,基于索引 1 到末尾的内容
  • @AdrianShum - 这不是作业,它是我现在正在处理的项目用例场景的一部分。无论如何感谢算法,它解决了我的问题。
  • @Raghavendra 这里的“家庭作业”不仅包括字面意义上的家庭作业,还包括更多关于在stackoverflow中应该如何提问的问题。
【解决方案2】:
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));

【讨论】:

  • “我有一个数组列表(大小未知)”...代码需要适用于任意数量的字符串
  • stackover flow 不是解决家庭作业的地方。我提供了一个提示,因为没有提供示例代码@Patrick Parker
猜你喜欢
  • 2013-05-18
  • 2014-01-14
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 2017-11-11
  • 2021-06-16
相关资源
最近更新 更多