【剑指Offer】面试题28:字符串的排序
来源:互联网 发布:软件作业互助组 编辑:程序博客网 时间:2024/06/06 07:13
一:题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
二:解题思路
参考剑指Offer:
把一个字符串可以看成由两部分组成:
第一部分:它的第一个字符串
第二部分:后面所有的字符串
求整个字符串的的排列,可以看成两步:
首先求所有可能的出现在在第一个位置的字符,即将第一个字符与后面所有字符交换
第二固定第一个字符,求后面所有字符的排列
三:代码实现
class Solution {public: vector<string> Permutation(string str) { vector<string> array;//保留最终的全排列结果 if(str.size()==0) //边界条件,空字符串 return array; Permutation(array,str,0); sort(array.begin(),array.end()); //对array按照字典顺序输出 //很巧妙的办法,省略了统计字母出现的次数,并按字典顺序排列后的前期工作 return array; } void Permutation(vector<string> &array,string str,int begin){ if(begin==str.size()-1) array.push_back(str); //遍历第begin位的所有可能性 for(int i=begin;i<str.size();i++){ if(i!=begin && str[i]==str[begin])//重复字符跳过 continue; swap(str[i],str[begin]);//交换,使第begin位取到begin后不同的可能字符,再遍历后面的字符 Permutation(array,str,begin+1);//遍历其后面的所有字符 swap(str[i],str[begin]);//复位 } } };
阅读全文
0 0
- 剑指Offer之面试题28:字符串的排序
- 【剑指Offer】面试题28:字符串的排序
- 剑指offer面试题 字符串的排列
- 剑指offer面试题28字符串的所有排列permutation
- [剑指offer][面试题28]字符串的排列
- 【剑指offer】面试题28:字符串的排列
- 剑指Offer:面试题28 字符串的排列
- 剑指offer 面试题28—字符串的排列
- 《剑指Offer》面试题28:字符串的排列
- 《剑指Offer》学习笔记--面试题28:字符串的排列
- 剑指offer--面试题28:字符串的排列--Java实现
- 剑指offer--面试题28:字符串的排列--Java实现
- 【剑指Offer学习】【面试题28 :字符串的排列】
- 剑指offer面试题28-字符串的排列
- 剑指offer-面试题28:字符串的排列
- 剑指offer 面试题28:字符串的排列
- 剑指offer之面试题28:字符串的排列
- 剑指offer之面试题28字符串的排列
- Python3.X Windows平台 安装BeautifulSoup4
- PHP中常量
- JDBC驱动类加载
- php面试题目分享(1)
- 复制转发CSDN博客快捷方法
- 【剑指Offer】面试题28:字符串的排序
- Spring-IOC原理及装配Bean(XML方式)
- python中的six.moves模块的下载函数urlretrieve
- PAT甲级 1129. Recommendation System (25)
- oracle drop、truncate 分区表分区注意
- 1.4 Getting Started
- android纯代码方式适配屏幕
- 程序员面试金典:字符串--确定字符串互异、原串翻转、空格替换
- XShell + Xmanager Forward X11 through tunnelling