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

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

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

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

分析:

这题主要考递归思想。

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

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/

实现:

#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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索字符串
, int
, include
, vector
, 字符
INSTR
,以便于您获取更多的相关知识。

时间: 2024-08-26 04:59:46

百度面试题解析:字符串的排列(字符串)的相关文章

百度面试题解析:有n个长为m+1的字符串

题目: 有n个长为m+1的字符串, 如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接, 问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误 分析: 题外话:这段时间以来,做了30多面试题,现在越来越有感觉,对题的思路越来越清晰,并且很多基本的数据结果和算法都比较熟.继续做下去,为了心中的梦想... 这题可以联想到有向图的概念,字符串A的后m个字符与字符串B的前m个字符串相连,可以看成图节点A->图节点B,这样把所有的节点连接起来,就是个有向图. 求

jsoup解析html某段字符串获取不了,应该是转义问题,但不知道如何解决,求帮助

问题描述 jsoup解析html某段字符串获取不了,应该是转义问题,但不知道如何解决,求帮助 http://pan.baidu.com/wap/share/home?uk=3306425232&third=0 这是我用jsoup解析的一个url地址,解析其中一段class为该页面信息: 控制台输出如下 <div class="pages complete-pages" xmlns="http://www.w3.org/1999/xhtml"> &

解析带有函数的字符串

问题描述 怎样解析带有函数的字符串比如:abs(abs(1)+2*(1+3)) 解决方案 解决方案二:你想要什么结果?解决方案三:引用楼主libo19872011的回复: 怎样解析带有函数的字符串比如:abs(abs(1)+2*(1+3)) 用c#动态编译吧..解决方案四:我实在datatable上进行操作的.就是在列之间进行的运算.比如:第二列值=abs(第一列)+2*(第二列值)之类的解决方案五:楼主搞编译原理吗?解决方案六:不是的啊,不知道这样功能怎样实现啊解决方案七:引用5楼libo19

获取条形码-js解析条形码并返回字符串

问题描述 js解析条形码并返回字符串 可以用js解析条形码并且返回条形码信息么?有的话应该怎么做? 解决方案 http://www.oschina.net/project/tag/238/barcode?lang=28&sort=view 解决方案二: http://www.desteps.com/web/effects/0100821.html http://www.cnblogs.com/AloneSword/p/3286100.html 解决方案三: 有没有解码类的插件??

java字符串组合排列递归问题

问题描述 java字符串组合排列递归问题 String a0,a1,a2,...,an; a0="我饿全文"; a1="ABC"; a2="abc"; '''' an="wre"; 每次从每个an中只取一个字符组合成字符串,全部排列出来,如: 我+A+a+w,我+A+a+r等.这个怎么弄啊? 解决方案 /* package whatever; // don't place package name! */ import jav

java json字符串解析,获取json字符串中数组的值

问题描述 java json字符串解析,获取json字符串中数组的值 {"arr":["ipAddr","installationSite","imineSystemId","valid"],"login":0,"password":"","purview":"","userId":0,&

解析JavaScript中的字符串类型与字符编码支持_基础知识

定义字符串就是零个或多个排在一起的字符,放在单引号或双引号之中. 'abc' "abc" 单引号字符串的内部,可以使用双引号.双引号字符串的内部,可以使用单引号. 'key = "value"' "It's a long journey" 上面两个都是合法的字符串. 如果要在单引号字符串的内部,使用单引号(或者在双引号字符串的内部,使用双引号),就必须在内部的单引号(或者双引号)前面加上反斜杠,用来转义. 'Did she say \'Hello

JS操作XML实例总结(加载与解析XML文件、字符串)_javascript技巧

本文实例讲述了JS操作XML的方法.分享给大家供大家参考,具体如下: 我的xml文件Login.xml如下. <?xml version="1.0" encoding="utf-8" ?> <Login> <Character> <C Text="热血" Value="0"></C> <C Text="弱气" Value="1&qu

解析C++中的字符串处理函数和指针_C 语言

C++字符串处理函数 字符串连接函数 strcat 其函数原型为 strcat(char[],const char[]); strcat是string catenate(字符串连接)的缩写.该函数有两个字符数组的参数,函数的作用是:将第二个字符数组中的字符串连接到前面字符数组的字符串的后面.第二个字符数组被指定为const,以保证该数组中的内容不会在函数调用期间修改.连接后的字符串放在第一个字符数组中,函数调用后得到的函数值,就是第一个字符数组的地址.例如: char str1[30]=″Peo