【发布时间】:2011-11-26 18:29:24
【问题描述】:
数学/算法从来都不是我的强项(!)所以在这方面寻求帮助。
对于具有以下签名的方法,最有效的实现是什么:
/*
* pairParts.size() > 0
* pairParts.size() is always an even number
*/
private Set<StringPairGroup> getAllPossibleStringPairGroups(Set<String> pairParts) {
Set<StringPairGroup> groups = new HashSet<StringPairGroup>();
// logic that adds all possible StringPairGroups
` return groups;
}
/*
* StringPair object: first and second values cannot be null.
* StringPair object: first != second
* StringPair object: is equal to another if both the first values and both the second values are equal.
*/
public class StringPair {
private final String first;
private final String second;
...
}
/*
* StringPairGroup object: is equal to another if their StringPair sets exactly match.
*/
public class StringPairGroup {
Set<StringPair> stringPairs
...
}
例如,输入 {'A', 'B'} 将返回 {[AB],[BA]}。 {'A', 'B', 'C', 'D'} 的输入将返回 {[AB],[BA],[AC],[CA],[AD],[DA][...],[AB,CD],[BA,CD],[AB,DC],[BA ,DC],[AC,DB],[...]}。
我真的只是对创建所有可能的 StringPairGroups 的逻辑感兴趣 对于任何一组输入字符串。我可能会想出某种蛮力实现,但我宁愿知道如何做一些更“聪明”的事情。
所以任何关于我将如何实现的提示都会很有用。
编辑:
对不起,我想我可能错过了一些非常重要的事情。我真的开始迷惑自己了。就是这样:
StringPairGroup 不能在其所有 StringPair 中包含重复的“pair part”。这有意义吗?
【问题讨论】:
-
这些是字符串集合元素的组合——你可能需要阅读一些组合理论。
-
组合理论? (!) - 谢谢,会调查它
-
不,这不是家庭作业。我已经过了上学年龄(不幸的是!)
-
我们可以假设 Set
中的顺序无关紧要吗? -
在比较 StringPairGroup 对象时,Set
中的顺序无关紧要