百度面试题:字符串的排列(字符串)

2014-11-23 21:35:47 · 作者: · 浏览: 4

题目:输入一个字符串,打印出该字符串中字符的所有排列。

例如输入字符串abc,则输出由字符a, b, c 所能排列出来的所有字符串

abc, acb, bac, bac, cab和cab。


分析:

这题主要考递归思想。

依次取出每个字符,剩下的字符的字符串所有排列都打印出来,再加上开始的字符。


实现:

#include
   
    
#include
    
      #include
     
       #include
      
        #include
       
         using namespace std; vector
        
          printallres(string instr) { vector
         
           vecres; vecres.clear(); int len = instr.length(); if(len == 1) { vecres.push_back(instr); return vecres; } if( len <= 0) return vecres; for(int i = 0; i < len; 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
          
            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
           
             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,