您的位置:首页 > 职场人生

经典面试题之字符串的全排列

2016-08-31 16:47 323 查看

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.代码实现

public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
int n=str.length();
char[] arr=new char
;
for(int i=0;i


4.问题扩展

如果字符串中存在重复字符呢?明显上述代码就不成立了,为什么呢?如果有重复字符,与相同字符的交换输出结果必定有重复,所以我们对于相同的字符应该只交换一次,实际上我们可以增加一个数组,记录与当前位置字符交换过的字符,每次交换前都要进行判断,如果要交换的字符已经不存在该数组,才进行交换。

改进的代码:

public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
int n=str.length();
char[] arr=new char
;
for(int i=0;i


输入:accc
输出:accc

           cacc

           ccac

           ccca
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: