41. 百度面试题:字符串的排列(字符串)
2014-05-14 23:18
453 查看
题目:输入一个字符串,打印出该字符串中字符的所有排列。
例如输入字符串abc,则输出由字符a, b, c 所能排列出来的所有字符串
abc, acb, bac, bac, cab和cab。
分析:
这题主要考递归思想。
依次取出每个字符,剩下的字符的字符串所有排列都打印出来,再加上开始的字符。
实现:
编译:
g++ test.cpp -o test
运行:
./test abc
输出:
abc,acb,bac,bca,cab,cba,
增加测试用例(@abamon 朋友的提出的漏洞,修改,并增加的用例):
./test aab
输出:
aab,aba,baa,
例如输入字符串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,
相关文章推荐
- 41. 百度面试题:字符串的排列(字符串)
- 微软,Google面试题 (28) —— 字符串的排列
- 从300万字符串中找到最热门的10条(百度面试题)
- 面试题整理8 字符串的排列
- 【剑指offer】面试题28:字符串的排列
- 字符串的排列和组合实现(面试题 28)
- 程序员面试题精选100题(28)-字符串的排列
- 剑指offer 面试题28 字符串全排列
- 程序员面试题精选100题(28)-字符串的排列[算法]
- 剑指offer————面试题28(字符串排列)
- 百度面试题:找出给定字符串对应的序号
- 面试题28:字符串的排列
- 面试题11 - 字符串的排列[算法]
- 面试题之微软 字符串的所有排列
- 面试题28:字符串的排列
- 面试题11 - 字符串的排列[算法]
- 字符串面试题系列之七:字符串全排列
- 31. 百度面试题:有n个长为m+1的字符串
- [百度面试题]找出字符串中连续出现次数最多的子串