百度面试题解析:字符串的排列(字符串)2014-12-24题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a, b, c 所能排列出来的所有字符串abc, acb, bac, bac, cab和cab。分析:这题主要考递归思想。依次取出每个字符,剩下的字符的字符串所有排列都打印出来,再加上开始的字符。实现:
#include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<vector>#include <algorithm>using namespace std;vector<string> printallres(string instr){vector<string> vecres;vecres.clear();int len = instr.length();if(len == 1){vecres.push_back(instr);return vecres;} if( len <= 0)return vecres;vector<char> _tvecdata;_tvecdata.clear();for(int i = 0; i < len; i++){vector<char>::iterator it = find(_tvecdata.begin(),_tvecdata.end(), instr[i]);if(it != _tvecdata.end()) continue;_tvecdata.push_back(instr[i]);string tstr(1, instr[i]);int j;string str1 = "";if(i > 0)str1 = instr.substr(0, i);string str2 = instr.substr(i+1, len - i -1);str1 += str2;vector<string> vecares = printallres(str1);int k = 0;while( k < vecares.size()){string str3= tstr + vecares[k];vecres.push_back(str3);k ++;}}return vecres;}int main(int argc, char* argv[]){if(argc >= 2){vector<string> vecstr = printallres(argv[1]);for(int i = 0; i < vecstr.size(); i ++)cout << vecstr[i].c_str() << ",";}return 0;}
编译:g++ test.cpp -o test运行:./test abc输出:abc,acb,bac,bca,cab,cba,增加测试用例(@abamon 朋友的提出的漏洞,修改,并增加的用例):./test aab输出:aab,aba,baa,作者:csdn博客 hhh3h