是否可以对具有重复字符的字符串进行排列?

问题描述 投票:0回答:1

我目前在颤振器上使用trotter dart包,但是无法生成具有重复数字的字符串的所有排列。

它与1234兼容,但对2344无效。

flutter dart permutation
1个回答
0
投票

(免责声明:我是trotter的作者。感谢您对我的图书馆感兴趣!)

[当处理中等数量的项目时,我们可以简单地创建从索引的规则排列序列到任意列表中各个项目的映射。

在这种情况下,任意列表包含字符串'2344'中的项目,因此我们可以如下生成这些项目的排列。 (但是请注意,对于无法区分的项目,排列不是唯一的。不过,可以通过转换为Set来摆脱非唯一的项目。)

import 'package:trotter/trotter.dart';

main() {
  final items = characters('2344'),
      indices = List<int>.generate(items.length, (i) => i),
      permsOfItems = indices
          .permutations()
          .iterable
          .map((perm) => perm.map((index) => items[index]).join());

  print('All permutations (including non unique):');
  for (final perm in permsOfItems) {
    print(perm);
  }

  print('\nOnly unique:');
  for (final perm in permsOfItems.toSet()) {
    print(perm);
  }
}

输出:

所有排列(包括非唯一排列):234423442434423442432443244324344234424344234423443244324342432434243442344243424324342432443244唯一的:234424344234424324434423443243424324342434423244
© www.soinside.com 2019 - 2024. All rights reserved.