【发布时间】:2011-01-01 00:09:41
【问题描述】:
void permute(string elems, int mid, int end)
{
static int count;
if (mid == end) {
cout << ++count << " : " << elems << endl;
return ;
}
else {
for (int i = mid; i <= end; i++) {
swap(elems, mid, i);
permute(elems, mid + 1, end);
swap(elems, mid, i);
}
}
}
上面的函数显示了str的排列(str[0..mid-1]作为固定前缀,str[mid..end]作为可置换后缀)。所以我们可以使用permute(str, 0, str.size() - 1) 来显示一个字符串的所有排列。
但该函数使用递归算法;也许它的性能可以提高?
有没有更好的方法来置换字符串?
【问题讨论】:
-
你看过STL的next_permutation函数了吗? cplusplus.com/reference/algorithm/next_permutation
-
不确定您在寻找什么?我们在 STL 和 Boost 中都有用于排列的函数,是您对它们的性能不满意还是您对实现感兴趣。
-
现在我把所有的工作都放在了一个答案中,我希望有人在赏金到期之前注意到,即使它是为了告诉我这是多么可怕的黑客攻击。 :-)
-
添加了您要求的解释。
标签: c++ algorithm string permutation