zoukankan      html  css  js  c++  java
  • 41. 百度面试题:字符串的排列(字符串)

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

    比如输入字符串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,


  • 相关阅读:
    深入理解JavaScript系列(28):设计模式之工厂模式
    创建指定数量的随机字符串
    VerifyCodeUtil.java
    XmlUtils.java
    MD5
    JacksonUtils.java
    Dom4jUtils.java
    DateFormatUtil.java
    CommonUtils.java
    CacheManagerUtils.java
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/6865671.html
Copyright © 2011-2022 走看看