基于 LinkedHashMap 的字符串的可能排列?

Possible permutations of string based on 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)

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

很简单...

  1. 假设您的地图中的条目数是 N
  2. 此类字符串的每个可能排列与长度为 N 的数组 boolean 之间存在一对一映射。如果数组在 K 位置有一个 true,我们从映射条目 K 中选择键,否则我们选择值。
  3. 因此,要生成所有可能的排列,您需要 generate all possible boolean arrays(与二进制数相同)长度为 N,然后使用每个排列创建相应的字符串。

试试这个。

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]