首页 > 解决方案 > 基于 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)

我基本上希望整个地图的每个组合都按顺序排列,同时在地图的键和值之间交替。

标签: javaalgorithmrecursionpermutationlinkedhashmap

解决方案


试试这个。

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]

推荐阅读