基于 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)
我基本上希望整个地图的每个组合都按顺序排列,同时在地图的键和值之间交替。
很简单...
- 假设您的地图中的条目数是
N
- 此类字符串的每个可能排列与长度为
N
的数组 boolean
之间存在一对一映射。如果数组在 K
位置有一个 true
,我们从映射条目 K
中选择键,否则我们选择值。
- 因此,要生成所有可能的排列,您需要 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]
这个问题困扰我好几天了。任何帮助是极大的赞赏!
我制作了一个 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)
我基本上希望整个地图的每个组合都按顺序排列,同时在地图的键和值之间交替。
很简单...
- 假设您的地图中的条目数是
N
- 此类字符串的每个可能排列与长度为
N
的数组boolean
之间存在一对一映射。如果数组在K
位置有一个true
,我们从映射条目K
中选择键,否则我们选择值。 - 因此,要生成所有可能的排列,您需要 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]