输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

本文主要是介绍输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

class Solution {  
private: string temp;  
private: vector<string> result;  
public:  vector<string> Permutation(string str) {    vector<string> result;   //创建字符串数组    int len = str.length();  //求出字符串长度,作为参数传递控制循环次数    if(!len) return result;  //当输入为空时,直接返回    BubbleSort(str,0,len-1);  Permutations(result, str, 0, len);    return result;    }  
void Permutations(vector<string>&result, string str,int index, int len){    //当索引指向字符串尾部时,将str压入数组       if (index == len){//index==len,说明首位置已经是末尾了,这时的递归输入已经只有一个元素了   result.push_back(str);    return result;    }    for (int i = index; i < len; ++i) {    if (i!=index && str[i]== str[index]) continue;// 保证当输入多个重复字符时,不会重复计算    swap(str[i],str[index]);//每一次,交换第i个位置和首位置的元素  Permutations(result, str, index+1, len);    }    }    
void BubbleSort(string &arr,int left,int high){  int i,j;for(i=left;i<high;i++){for(j=i+1;j<high;j++){if(arr[i]>arr[j]){swap(arr[i],arr[j]);}}}
}  
};  

思路:首先将字符串进行排序,然后将字符串分为两部分,第一个字符和后边N-1个字符。然后从第2个字符开始轮番和第一个字符交换

  swap(str[i],str[index]);//每一次,交换第i个位置和首位置的元素  

解决此问题两步比较关键:(1):字典排序:解决这个问题要求在写排列之前先把字符串进行排序使用选择排序

void BubbleSort(string &arr,int left,int high){  int i,j;for(i=left;i<high;i++){for(j=i+1;j<high;j++){if(arr[i]>arr[j]){swap(arr[i],arr[j]);}}}
}  

(2)重复字母:此问题可以在进行交换时直接跳过
 if (i!=index && str[i]== str[index]) continue;// 保证当输入多个重复字符时,不会重复计算    


这篇关于输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1035898

相关文章

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

C#从XmlDocument提取完整字符串的方法

《C#从XmlDocument提取完整字符串的方法》文章介绍了两种生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`属性,但输出的XML字符串不带格式,可读性差,... 方法1:通过XMLDocument的OuterXml属性,见XmlDocument类该方法获得的xm

电脑没有仿宋GB2312字体怎么办? 仿宋GB2312字体下载安装及调出来的教程

《电脑没有仿宋GB2312字体怎么办?仿宋GB2312字体下载安装及调出来的教程》仿宋字体gb2312作为一种经典且常用的字体,广泛应用于各种场合,如何在计算机中调出仿宋字体gb2312?本文将为您... 仿宋_GB2312是公文标准字体之一,仿China编程宋是字体名称,GB2312是字php符编码标准名称(简

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu