面试题之微软 字符串的所有排列
2014-01-22 22:54
399 查看
字符串的所有排列
保存一个空的字符串A,
对给定字符串B的每一个字符
插入A中,出入的位置有n(n为当前字符串A的长度)+1种情况
直至A的长度和B相同时,则输出A
举个例子,如下
给定字符串string=“bhe”
对于三个字符,答案最多就是6个
#include <iostream> #include <string> #include <fstream> using namespace std; // function all orders void All_orders(string A,string B,string::size_type n,ofstream &f); // function randstring string RandString(); // function main int main() { int i = 0; while(i<1) { ofstream f; f.open("txt.txt"); string test = RandString(); cout<<"test="<<test<<endl; All_orders("",test,0,f); f.close(); i++; } system("pause"); return 0; } // function all orders void All_orders(string A,string B,string::size_type n,ofstream &f) { if(n < B.length()) { string next = A; next = B + A; All_orders(next,B,n+1,f); for(string::size_type i = 1;i < A.length();i++) { next = A.substr(0,i)+B +A.substr(i,A.length()); All_orders(next,B,n+1,f); } if(A.length()>0) { next = A + B ; All_orders(next,B,n+1,f); } } else if(n == B.length()) { cout<<A<<" "<<endl; f<<A<<endl; } } // function randstring string RandString() { int size = 4; string result = ""; for(int i = 0; i<size; i++) { result = result + (char)( 'a' + rand()%10 ); } return result ; }
test2.cpp(非递归,我喜欢的)
#include <iostream> #include <string> #include <queue> #include <fstream> using namespace std; // function all orders void All_orders(string B); // function randstring string RandString(); // function main int main() { int i = 0; while(i<1) { ofstream f; f.open("txt.txt"); string test = RandString(); cout<<"test="<<test<<endl; All_orders(test); f.close(); i++; } system("pause"); return 0; } // function all orders void All_orders(string B) { queue<string> * Q = new queue<string> ; string first = ""; first = first+B[0]; //cout<<"first="<<first<<endl; Q -> push(first); string::size_type length ; string now ; while( Q -> front().length() < B.length() ) { now = Q -> front(); Q -> pop(); length = now.length(); Q->push(B[length]+now); for(string::size_type i = 1;i<length;i++) { Q->push(now.substr(0,i)+B[length]+now.substr(i,length)); } Q->push(now+B[length]); } ofstream f; f.open("text.txt"); while(!Q->empty()) { cout<<Q->front()<<endl; f<<Q->front()<<endl; Q->pop(); } f.close(); } // function randstring string RandString() { int size = 9; string result = ""; for(int i = 0; i<size; i++) { result = result + (char)( 'a' + rand()%10 ); } return result ; }
相关文章推荐
- 剑指offer 面试题28 字符串的排列与集合的所有子集
- 《剑指Offer》面试题:按字典序打印出该字符串中字符的所有排列
- 微软等数据结构+算法面试100题(2)--给出一个函数来输出一个字符串的所有排列
- 微软,Google面试题 (28) —— 字符串的排列
- 《剑指Offer》读书笔记---面试题28:字符串的排列,(扩展:求字符串的所有组合)
- 剑指offer 面试题35扩展:删除字符串中所有重复出现的字符 (C++版)
- P154、面试题28:字符串的排列
- 找出abc在字符串s中的所有排列方式
- 给出一个函数来输出一个字符串的所有排列
- 剑指offer 面试题28:字符串的排列
- 41. 百度面试题:字符串的排列(字符串)
- 面试题28:字符串的排列
- 传入一个字符串参数 获取这个字符串内所有字符的 不同排列情况
- 微软面试题day 6(打印所有对称子串)
- 微软100题(53)字符串的排列
- 微软面试题:反转字符串
- 剑指offer 面试题28:字符串的排列
- 面试题─用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列
- 剑指offer之面试题28:字符串的排列
- java输出字符串的所有排列