c++实现字符串全排序

#include<iostream>
#include<vector>
#include<string>
using namespace std;
typedef vector<string> vectorString;
vectorString permu(string str)
{
    if(str.length()==0)
    {
        vectorString vs;
         vs.push_back("");
        return vs;
    }else if(str.length()==1)
    {
        vectorString vs;
        vs.push_back(str);
        return vs;
    }
    vectorString vs;
    string ch=str.substr(0,1);
    vectorString vsTmp= permu(str.substr(1));
    for(int i=0;i<vsTmp.size();i++)
    {
        string strTmp=vsTmp[i];
        for(int j=0;j<=strTmp.length();j++)
        {
            string strTmp2=strTmp;
            strTmp2.insert(j,ch);
            //cout<<strTmp2<<endl;
            vs.push_back(strTmp2);
        }
    }
    return vs;
}
int main()
{
    string str="abcdefg";
    vectorString vs=permu(str);
    cout<<vs.size()<<endl;
    for(int i=0;i<vs.size();i++)
    {
        cout<<vs[i]<<endl;
    }
    cout << endl<<"Hello world!" << endl;
    return 0;
}
时间: 2024-10-06 00:42:27

c++实现字符串全排序的相关文章

字符串全排序,非重复的全排序

题目:求一个字符串的全排列. 思路:我们可以生成一个解答树:拿字符串"bca"来说,此时如果我们处理到第cur个位置,那么我们可以和从当前这个位置开始依次和之后的位置互换字符,这样就能确保二叉树每一层(当前位置)的结果都能出现过了,然后接着递归下去. package org; import java.util.Arrays; public class SortMethod { public static void create(char a[], int cur, int n) { i

全排序之字典排序

字典序全排列算法研究 一. 非递归算法(字典序法) 对给定的字符集中的字符规定了一个先后关系,在此基础上规定两个全排列的先后是从左到右逐个比较对应的字符的先后. 例如:字符集{1,2,3},较小的数字位置较先,这样按字典序生成的全排列是 123,132,213,231,312,321 ※ 一个全排列可看做一个字符串,字符串可有前缀.后缀. 生成给定全排列的下一个排列.所谓一个的下一个就是这一个与下一个之间没有其他的.这就要求这一个与下一个有尽可能长的共同前缀,也即变化限制在尽可能短的后缀上. 对

Hadoop实现全排序

1.1TB(或1分钟)排序的冠军 作为分布式数据处理的框架,集群的数据处理能力究竟有多快?或许1TB排序可以作为衡量的标准之一. 1TB排序,就是对1TB(1024GB,大约100亿行数据)的数据进行排序.2008年,Hadoop赢得1TB排序基准评估第一名,排序1TB数据耗时209秒.后来,1TB排序被1分钟排序所取代,1分钟排序指的是在一分钟内尽可能多的排序.2009年,在一个1406个节点组成的hadoop集群,在59秒里对500GB完成了排序:而在1460个节点的集群,排序1TB数据只花

[C++]对字符串向量排序

让字符串向量首先按字符串长度进行排序,长度短的在前,长的在后.如果长度相等则按字典序排序,并移除重复的字符串. 去重复并按字典序排序: void elimDumps(vector<string> &words) { // 按字典序排序 sort(words.begin(), words.end()); // unique重排输入范围,使得每个单词只出现一次 // 并排列在范围的前部,返回指向不重复区域之后一个位置的迭代器 auto end_unique = unique(words.b

JAVA-从题目看算法,将输入字符串进行排序并输出

来看一个排列的例子,它所做的工作是将输入的一个字符串中的所有元素进行排序并输出,例如:你给出的参数是"abc" 则程序会输出:abc acb bac bca cab cba 这是一个典型的可用递归算法来实现的例子,我们来看一下利用递归的2种不同解法. 1.典型递归元素交换的算法 (1)算法的出口在于:low=high也就是现在给出的排列元素只有一个时. (2)算法的逼近过程:先确定排列的第一位元素,也就是循环中i所代表的元素. package test; import java.uti

五 数据组织模式 4)全排序、混排。

前面讲的 分区.分箱模式 都是不关心数据的顺序. 接下来 全排序.混排序模式 关心的是数据按照指定键进行并行排序. 全排序解释: 排序在顺序结构程序中容易实现, 但是在MapReduce 中,或者说在并行编程中不易实现.这是典型的 "分治法". 每个 reduce 将按照键对他的数据排序,但这种排序并不是全局意义上的排序. 这里想做的是全排序,记录是整个数据集按照顺序排列好的. 作用: 排序号的数据有很多有用的特性,比如时间排序可以提供一个基于时间轴的视图.在一个已排序好的数据集中查找

使用qsort()和bsearch()函数对值和字符串进行排序和查找

#include <stdio.h> #include <stdlib.h> #define MAX 20 int intcmp(const void *v1, const void *v2); int main(void){   int arr[MAX], count, key, *ptr;      //提示用户输入一些整数    printf("Enter %d integer values; press Enter each.\n", MAX);   f

M/R全排序

例如:1KW数据,200个map,100个reduce. (1)map阶段,每个map分别局部排序,得到200个排好顺序的结果 (2)对所有的数据进行99个抽样s1,s2...s99(按照顺序排列) (3)根据每个map中数据在抽样数据的前后,将每个map划分成(最多)100个部分m1-1,m1-2....m1-100,m2-1,m2-2...m2-100...m200-1,m200-2,m200-100,所有map(最多)2W个部分 (4)这2W个部分每个部分按照抽样和抽样的比较分别放在每个抽

回调函数实现对整形数组和字符串的排序

(一)冒泡排序实现对整形数组的排序 在以前,我们只会使用冒泡排序的方法对整行数组进行排序,简单的两个for循环,外层循环控制循环次数,内层循环控制比较次数,就像下面代码,便可实现: #include<stdio.h> int main() { int arr[10]={11,9,8,7,6,5,4,3,2,1}; int i=0; int j=0; int tmp=0; for(j=0;j<10;j++) { for(i=0;i<10-j;i++) if(arr[i]>arr