这是我的递归解决方案,它返回一组字符串的所有排列。但是,此实现不允许任何重复。例如,对于输入字符串rs
,它将仅输出{rs,sr}
,而在允许重复的情况下,正确的输出应为{rs,sr,rr,ss}
。可以使用与下面相同的代码,通过一些小修改/添加来解决上述问题吗?
Set<String> findCombinations(String time){
if(time.length() == 1){
return new HashSet<>(Arrays.asList(time));
}
char firstChar = time.charAt(0);
Set<String> combos = new HashSet<>();
Set<String> currentCombo = findCombinations(time.substring(1));
Iterator<String> iter = currentCombo.iterator();
while(iter.hasNext()){
String currentStr = iter.next();
for(int i = 0; i <= currentStr.length(); i++){
StringBuilder builder = new StringBuilder(currentStr);
combos.add(builder.insert(i, firstChar).toString());
}
}
return combos;
}
据我所知,还有其他帖子可以解决此问题。我正在寻找的是获得所需结果所需的上述代码的最小变化。