java - 基于 LinkedHashMap 的字符串可能排列?
问题描述
所以这个问题困扰了我好几天。任何帮助是极大的赞赏!我制作了一个 LinkedHashMap,它存储了字符串每个部分的可能组合,并且我试图在字符串的 ArrayList 中获取所有排列,同时保持字符串顺序。例如,如果地图是:
a=ab, b=c
组合将是:
ab
ac
abb
abc
我尝试简单地循环每个键和值列表,堆的算法无法保持元素的顺序,也尝试使用递归,但我不确定如何。如果有人能指出我正确的方向或提示我,那就太好了。谢谢
我正在尝试做的另一个地图示例。
如果地图是:
A=a, B=b
输出是:
AB (key1, key2)
Ab (key1, value2)
aB (value1, key2)
ab (value1, value2)
我基本上希望整个地图的每个组合都按顺序排列,同时在地图的键和值之间交替。
解决方案
试试这个。
static List<String> possiblePermutations(Map<String, String> map) {
int size = map.size();
List<Entry<String, String>> list = new ArrayList<>(map.entrySet());
List<String> result = new ArrayList<>();
new Object() {
void perm(int i, String s) {
if (i >= size) {
result.add(s);
return;
}
Entry<String, String> entry = list.get(i);
perm(i + 1, s + entry.getKey());
perm(i + 1, s + entry.getValue());
}
}.perm(0, "");
return result;
}
public static void main(String[] args) {
Map<String, String> map = new LinkedHashMap<>();
map.put("a", "ab");
map.put("b", "c");
map.put("x", "y");
List<String> result = possiblePermutations(map);
System.out.println(result);
}
输出:
[abx, aby, acx, acy, abbx, abby, abcx, abcy]
推荐阅读
- javascript - 使用 Node.Js 模块,如何在同一个模块中使用对象函数?
- ios - 如何更改uicollectionView中角单元格的背景颜色
- angular - 如何在 Firebase 数据库中获取事务的结果?
- ios - 在重新排序已在进行时尝试在集合视图上开始重新排序
- c# - UserControl 的通用列表
- java - 从集合转移
数据到 HashMap (Java) - swift - 如何在 ARKit 2/SceneView 中延长线段
- html - 打印asp.net,javascript后更改表格的字体大小和列宽
- bash - 如何在shell脚本中使用AND运算符进行字符串相等
- javascript - javascript包含方法输出不正确的结果