经典面试题之字符串的全排列
来源:互联网 发布:苹果自定义铃声mac 编辑:程序博客网 时间:2024/06/05 09:42
1.题目描述
输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,输出abc,acb,bac,bca,cab和cba
2.问题分析
这个问题我们一开始看起来会比较困难,但是如果仔细分析一下排列的实质,或许很快会有思路。我们来看排列的实质,字符串的abc第一个字符分别与后边的字符(含自己)交换可以得到abc,bac,cba,然后对这每一个字符串从第二个字符分别与后边的字符(含自己)交换可以得到abc,acb,bac,bca,cba,cab,依此下去,最后就输出了abc,acb,bac,bca,cab和cba。那么这个问题如果我们按照这个思路来做的话,必然就是递归+回溯。
3.代码实现
4.问题扩展
如果字符串中存在重复字符呢?明显上述代码就不成立了,为什么呢?如果有重复字符,与相同字符的交换输出结果必定有重复,所以我们对于相同的字符应该只交换一次,实际上我们可以增加一个数组,记录与当前位置字符交换过的字符,每次交换前都要进行判断,如果要交换的字符已经不存在该数组,才进行交换。
改进的代码:
输入:accc
输出:accc
cacc
ccac
ccca
cacc
ccac
ccca
0 0
- 经典面试题之字符串的全排列
- 【面试题之算法部分】字符串的全排列
- 面试题28 字符串的全排列
- 面试题_28——字符串的全排列
- 百度面试题 字符串的全排列输出
- 【面试题】剑指Offer-28-字符串的全排列
- 剑指offer面试题28 字符串的全排列
- 笔试面试题(9)----字符串全排列
- 【面试题】全排列
- 【面试题】:全排列
- 面试题之微软 字符串的所有排列
- 剑指offer面试题之字符串的排列
- 剑指offer之面试题28:字符串的排列
- 剑指offer之面试题28字符串的排列
- 基于visual Studio2013解决面试题之0708字符串全排列
- 剑指offer 面试题28 字符串全排列
- LinkedIn 面试题:字符串的全排列(Permutation)和组合(Combination)
- 面试题11 - 字符串的排列[算法]
- Mac OS X常用命令
- PHP性能分析——xhprof
- android 之 AlarmManager 系统闹钟(3)
- Linux的sed用法
- 从源码分析HashMap实现
- 经典面试题之字符串的全排列
- 工厂方法模式
- app拆分dex包
- 小探py线程
- 关于java JFrame窗口关闭弹出showConfirmDialog 对话框关闭而主窗口不关闭
- android-ProgressBar属性
- STS下载和springsourece tool suite update 下载地址
- 原生js和jquery两种处理cookie的插件介绍
- Java做txt日志记录