如何找到字符串的所有可能字母组合?

时间:2011-07-29 15:50:07

标签: algorithm pseudocode

我有一个字符串,我需要找到这个字符串的所有可能的字母组合。我能做到这一点的最佳方式是什么? 例如:

abc

结果:

abc
acb
bca
bac
cab
cba
到目前为止,我什么都没有。我不是要求代码。我只想问最好的方法吗?一个算法?伪代码?也许是讨论?

5 个答案:

答案 0 :(得分:3)

你可以对它进行排序然后使用std :: next_permutation

看一下示例:http://www.cplusplus.com/reference/algorithm/next_permutation/

答案 1 :(得分:1)

您想要组合还是排列?例如,如果你的字符串是“abbc”,你想看一次或两次“bbac”吗?

如果您真的想要排列,可以使用std::next_permutation,它会为您完成所有工作。

答案 2 :(得分:1)

如果您想要组合(订单独立)您可以使用组合查找算法,例如找到herehere的算法。或者,您可以使用this(组合生成器的java实现,并举例说明您想要的内容。

或者,如果您想要在帖子中列出的内容(排列),那么您可以(对于C ++)使用std::next_permutation中的<algorithm.h>。您可以在std::next_permutation here找到更多相关信息。

希望这会有所帮助。 :)

答案 3 :(得分:0)

在C ++中,std::next_permutation

std::string s = "abc";
do
{
  std::cout << s << std::endl;
} while (std::next_permutation(s.begin(), s.end()));

答案 4 :(得分:0)

复制旧的维基百科文章;

对于每个数k,0≤k<0。 n!,以下算法在序列s上生成唯一的排列。

function permutation(k, s) {
     for j = 2 to length(s) {
        swap s[(k mod j) + 1] with s[j]; // note that our array is indexed starting at 1
        k := k / j;        // integer division cuts off the remainder
     }
     return s;
}