打印给定字符串中字符的所有排列
2014-08-19 11:49
239 查看
题目:
输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
解决:
简单起见,字符串中没有相同的字符。
其实这是个递归的过程:对于字符串str,先分别逮住其中的每一个,如s,把它从str中踢开,成了 s + tr(下一次踢开t变为 t + sr),然后对于剩下来的,再从剩下的再次分别踢开一个加到左边的后面(假想被踢开的都在左边,剩下的都在右边哈),一直如此,直至右边都踢光了。算法如下:
代码如下:
结果:
总结:
递归的思想。
其实可以看做一棵树,从根节点开始分叉,每一个分叉是一种情况,最终到叶节点的高度为n,n为字符串长度,每个叶节点是一种情况。
输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
解决:
简单起见,字符串中没有相同的字符。
其实这是个递归的过程:对于字符串str,先分别逮住其中的每一个,如s,把它从str中踢开,成了 s + tr(下一次踢开t变为 t + sr),然后对于剩下来的,再从剩下的再次分别踢开一个加到左边的后面(假想被踢开的都在左边,剩下的都在右边哈),一直如此,直至右边都踢光了。算法如下:
void show(strL, strR) { if (strR不是空字符串) { for (对于strR中的每一个字符) { 把这个字符踢到strL的后面 递归show() } } else { 显示左边的字符串 } }
代码如下:
#include <iostream> #include <string> using std::cout; using std::endl; using std::cin; using std::string; //在这个过程中,把字符串分为左右两半,左边的字符已经固定,右边的可以组合出各种情况 //最后把左边固定的和右边各种情况一一连接,就是完整的各种字符串了 void show(string strL, string strR) { if (!strR.empty()) //右边的非空 { for (int i = 0; i < strR.size(); i++) //对于每种情况 { //注意要用左右字符串的副本 string tempL = strL; string tempR = strR; tempL.append(1, strR[i]); //把那个字符添加到左边字符串的后面 tempR.erase(i, 1); //右边的字符串中删除那个 show(tempL, tempR); //递归进行 } } else { cout << strL << endl; } } int main(void) { string left; string test("abcde"); show(left, test); cout << "------------------------------------\n" << left << endl << test; cin.get(); }
结果:
总结:
递归的思想。
其实可以看做一棵树,从根节点开始分叉,每一个分叉是一种情况,最终到叶节点的高度为n,n为字符串长度,每个叶节点是一种情况。
相关文章推荐
- java输入一个字符串,打印出该字符串中字符的所有排列,随机打乱排序
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
- 输入一个字符串,打印出该字符串中字符的所有排列
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
- 输入字符串,要求打印出所有字符排列的可能性
- 打印字符串中所有字符的排列
- 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
- 输入一个字符串,打印出该字符串中字符的所有排列
- java 输入一个字符串,打印出该字符串中字符的所有排列
- 写正确函数需要注意的地方:输入一个字符串,打印出该字符串中字符的所有排列
- 输入一个字符串,打印出该字符串中字符的所有排列
- 已知一个有重复字符的字符串,打印其所有不同的字符排列
- 《牛客网剑指offer27题》输入一个字符串,按字典序打印出该字符串中字符的所有排列
- 《剑指Offer》面试题:按字典序打印出该字符串中字符的所有排列
- 输入一个字符串,打印出该字符串中字符的所有排列
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。C++
- 打印出字符串中字符的所有排列
- 输入一个字符串,打印出该字符串中字符的所有排列。
- 给定字符串,打印出组成字符串的字符的全排列