我正在开发电子商务应用程序,我需要从给定的字符串中生成所有可能的单词。
示例:
输入字符串: {ab}
预期产出: a,ab,ba,b
截至目前,我的输出结果为: a,ab,b
我在从结束回溯时遇到问题以生成字符串 ba 。
package com.ecommerce.util;
import java.util.HashSet;
public class Combinations {
private StringBuilder output = new StringBuilder();
private final String inputstring;
public Combinations(final String str) {
inputstring = str;
System.out.println("The input string is : " + inputstring);
}
public HashSet<String> combine() {
HashSet<String >set=new HashSet<>();
combine(0,set);
System.out.println(set);
return set;
}
private void combine(int start,HashSet<String >set) {
for (int i = start; i < inputstring.length(); ++i) {
output.append(inputstring.charAt(i));
System.out.println(output);
set.add(output.toString());
if (i < inputstring.length())
combine`enter code here`(i + 1,set);
output.setLength(output.length() - 1);
}
}
}
先谢谢你帮助我。
答案 0 :(得分:1)
您搜索的内容与集合中的功率集非常相似。在{a, b}
的示例中,这是集合{{}, {a}, {b}, {a, b}}
。有一些简单的计算算法,可以在SO Obtaining a powerset of a set in Java找到一个。
您还可以在维基百科上找到说明和伪代码:Power set at Wikipedia
请注意,根据定义,功率集还包含空集{}
,您可以从链接算法获得的结果中减去它(或者在创建时直接拒绝它)。
如果你想获得ab
和ba
你也可以只需对powerSet
方法的输出使用置换方法,该方法创建每个元素的字符的所有排列。这也已在SO处回答,例如:Generating all permutations of a given string
如果不进行修改,您可以使用链接的方法powerSet(Set<T> originalSet)
,使用该代码段返回Set<Set<T>>
和permutation(String str)
:
String input = ... // Your input here
// Convert the input into a set of character
final Set<Character> inputSet = new HashSet<>();
for (int i = 0; i < input.length(); i++) {
inputSet.add(input.charAt(i));
}
// Use the method to compute the power set
Set<Set<Character>> powerSet = powerSet(inputSet);
// Output all elements
for (Set<Character> element : powerSet) {
// Combine the character in the set to a String
StringBuilder sb = new StringBuilder();
for (Character c : element) {
sb.append(c);
}
// Here is a final element ready for collection or a print
String outputElement = sb.toString();
// The method already prints the results by itself, you can modify it easily such that it returns a Set<String> or similar
permutation(outputElement);
}