`

字符串全排列(permutation)(转)

 
阅读更多

问题:给定字符串S,生成该字符串的全排列。

方法1:依次从字符串中取出一个字符作为最终排列的第一个字符,对剩余字符组成的字符串生成全排列,最终结果为取出的字符和剩余子串全排列的组合。

#include <iostream>
#include <string>
using namespace std;
void permute1(string prefix, string str)
{
if(str.length() == 0)
cout << prefix << endl;
else
{
for(int i = 0; i < str.length(); i++)
permute1(prefix+str[i], str.substr(0,i)+str.substr(i+1,str.length()));
}
}
void permute1(string s)
{
permute1("",s);
}
int main()
{
//method1, unable to remove duplicate permutations.
cout << "method1" << endl;
permute1("ABA");
}

优点:该方法易于理解,但无法移除重复的排列,如:s="ABA",会生成两个“AAB”。

方法2:利用交换的思想,具体见实例,但该方法不如方法1容易理解。

#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
void swap(char* x, char* y)
{
char tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
/* Function to print permutations of string
This function takes three parameters:
1. String
2. Starting index of the string
3. Ending index of the string. */
void permute(char *a, int i, int n)
{
int j;
if (i == n)
printf("%s\n", a);
else
{
for (j = i; j <= n; j++)
{
if(a[i] == a[j] && j != i)  //为避免生成重复排列,当不同位置的字符相同时不再交换
continue;
swap((a+i), (a+j));
permute(a, i+1, n);
swap((a+i), (a+j)); //backtrack
}
}
}
int main()
{
//method2
cout << "method2" << endl;
char a[] = "ABA";
permute(a,0,2);
return 0;
}

两种方法的生成结果:

method1
ABA
AAB
BAA
BAA
AAB
ABA
method2
ABA
AAB
BAA
请按任意键继续. . .
分享到:
评论

相关推荐

    求字符串的全排列

    总结起来,字符串全排列是一个经典的计算机科学问题,通过理解和应用递归与回溯,我们可以编写出解决这一问题的程序。这种问题有助于我们深入理解算法和递归思想,对于编程初学者来说,是一个很好的练习题目。

    带油重复字符串全排列递归解法

    常见得全排列有三种解决方案,for循环穷举,stl摸板函数next_permutation,还有DFS深度优先搜索,当我们遇到带有重复的字符串时应该考虑除去重复的部分。

    Java实现字符数组全排列的方法

    它创建了一个包含 'a', 'b', 'c' 的字符数组,并调用 `permutation` 进行全排列,最后输出所有可能的排列组合。 运行 `testPermutation`,你会看到如下输出: ``` abc acb bac bca cab cba ``` 这正是 'a', 'b', 'c...

    Python字符串的全排列算法实例详解

    ### Python字符串的全排列算法实例详解 #### 一、引言 在计算机科学中,全排列问题是一个常见的问题,尤其在解决密码学、组合优化等领域时尤为重要。全排列指的是从给定的一些元素中取出全部元素进行排列的方式。...

    C++字符串的全部排列

    在这个问题中,我们需要对给定的字符串中的每个字符进行全排列。 首先,我们来理解字符串的基本概念。在C++中,字符串是由字符组成的序列,可以使用`std::string`类来表示。字符串可以被初始化、操作、比较和拷贝,...

    字符串的全排列和组合算法.doc

    字符串的全排列和组合算法是计算机科学中的一种基础算法,主要应用于数据处理和问题求解。在本文档中,我们将探讨如何使用C++实现字符串的全排列算法,并讨论如何处理包含重复字符的情况。 首先,全排列是指从一个...

    Java递归实现字符串全排列与全组合

    "Java递归实现字符串全排列与全组合" Java递归实现字符串全排列与全组合是指使用Java语言通过递归算法实现字符串的全排列和全组合。全排列是指将字符串中的所有元素按照一定的顺序进行排列,而全组合是指将字符串...

    (ABCDE)字符串排序

    总结来说,"(ABCDE)字符串排序"是一个关于使用C++生成字符串全排列的问题,涉及到递归算法和排列的性质。通过`string_permutation`函数,我们可以有效地枚举一个字符串的所有可能排列,这在很多实际问题中,如数据...

    36.字符串的排列1

    首先,我们需要定义一个函数`permutation`,它接收一个字符串`str`作为输入,并返回一个包含所有排列结果的字符串向量`res`。如果输入字符串为空,那么返回空的向量。接着调用`dfs`函数进行深度优先遍历,初始时,...

    C语言实现输入一个字符串后打印出该字符串中字符的所有排列

    这段代码展示了如何在C语言中利用递归实现字符串字符的全排列。虽然这里只列举了三个字符的例子,但这个算法可以扩展到任意长度的字符串。通过递归调用,算法能够确保所有可能的字符排列都被打印出来。这种方法在...

    字符串的排列(dfs)1

    在给定的代码中,定义了一个名为`Solution`的类,其中包含一个`permutation`函数作为主入口,它接收一个字符串`s`作为输入,并返回一个包含所有排列的字符串向量`res`。代码还定义了一个`set&lt;string&gt;`类型的变量`ss`...

    permutation

    题目要求给定一个长度为 \(n-1\) 的由 "U" 和 "D" 构成的字符串,构造一个字典序最小的全排列 \(a\),使得: 1. 如果第 \(i\) 个字符是 "U",则有 \(a[i] [i+1]\); 2. 如果第 \(i\) 个字符是 "D",则有 \(a[i] &gt; a...

    python求一个字符串的所有排列的实现方法

    在求字符串所有排列的问题中,我们可以通过递归地固定第一个字符,然后对剩下的字符进行全排列,最后将固定字符放回原位。 以下是一个简单的递归实现: ```python def swap(str, i, j): tmp = str[i] str[i] = ...

    Java实现abc字符串排列组合

    本文将详细介绍Java实现abc字符串的排列组合,主要包括可重复排列、全排列和组合三个部分。 可重复排列 在Java中,可以使用递归来实现abc字符串的可重复排列。可重复排列是指从abc三个字符中选择字符,组成长度为3...

    StringProject

    在IT领域,字符串处理是必不可少的一部分,特别是在编程和算法设计中。"StringProject"这个项目显然是专注于字符串算法的实现和研究。以下将详细介绍标题和描述中提到的一些关键知识点,并结合压缩包中的文件名称来...

    hutc-Permutation with Repetition参考代码

    这里使用`std::swap`函数来交换字符串中的字符位置,以生成新的排列。 4. **回溯(Backtracking)**:回溯是一种用于寻找问题所有解或最优解的算法策略。在这个程序中,使用回溯来撤销已做出的选择,以便尝试其他可能...

    易语言全排列模块

    通过阅读和理解这段源码,开发者不仅可以学习到如何在易语言中实现全排列,还可以了解到递归或回溯法在解决问题时的应用,以及如何使用易语言处理数组和字符串数据。这对于提高编程技能和理解算法原理有着重要的实践...

    Python全排列操作实例分析

    与列表全排列类似,这里的`permutation`函数将字符串转换为列表,然后使用内部函数`permutation_list`通过递归来交换列表中的元素。不同之处在于,这里还引入了一个`cnt`变量来记录全排列的总数,并且利用了Python 3...

    全排列算法

    字典序是一种排序规则,它将字符串视为字符的序列,并按照字母表顺序比较每个位置的字符来确定顺序。在这种情况下,我们首先排列序列的第一个元素,然后是第二个,以此类推,直到所有元素都被考虑过。 全排列算法...

Global site tag (gtag.js) - Google Analytics