关闭

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

438人阅读 评论(0) 收藏 举报
分类:

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[n];
		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[n];
		for(int i=0;i

输入:accc
输出:accc
           cacc
           ccac
           ccca

0
0
查看评论

leetcode 关于全排列题目的简单总结

266 Palindrome Permutation  52.6%   Easy 46 Permutations 37.7%   Medium ...
  • menghan1224
  • menghan1224
  • 2016-08-21 22:18
  • 1421

[OpenJudge] 2.2基本算法之递归和自调用函数 全排列

这是NOI OPENJUDGE的一道题“全排列”,题意要求对给出的字符进行所有可能的排列,本文运用的是next_permutation函数,这个函数有很多的作用,详情请点击这里查看。
  • C20180630
  • C20180630
  • 2016-08-24 14:39
  • 780

JavaScript--------闭包 取for循环i

有个网友问了个问题,如下的html,为什么每次输出都是5,而不是点击每个p,就alert出对应的1,2,3,4,5。 [html] view plaincopyprint? html >     head...
  • yiyiivy
  • yiyiivy
  • 2014-12-06 15:57
  • 178

String字符串处理常见的面试题总结

首先,我们要先了解常量池的概念,常量池在java中用于保存在编译期已确定的,存在于已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = “str”这种申明方式;当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的...
  • nwpu_geeker
  • nwpu_geeker
  • 2017-12-03 14:06
  • 171

【前端笔试】JavaScript实现字符串全排列

我个人认为前端工程师笔试题中,算法题一般不难,也就这个难度,甚至比这还要简单。这是我在笔试过程中遇到的一个题~下面分享一下解题思路。 大体结构:定义一个方法,传入str变量,返回一个数组,包含所有排列: function fun(str){ var result = []; ...
  • qq_22944825
  • qq_22944825
  • 2017-09-16 15:02
  • 806

C语言常见字符串面试题

一些常用字符串操作函数的内部实现  memset: /*  * memset - Fill a region of memory with the given value  * @s: Pointer&...
  • hkh5730
  • hkh5730
  • 2013-11-09 19:22
  • 13690

Java中字符串比较的一道面试题

题目:public class Test { public static void main(String[] args) { String a = "hello"; String b = "hello"; ...
  • hp910315
  • hp910315
  • 2016-03-12 13:48
  • 1367

测试用例设计经典面试题之电梯、杯子、笔、桌子、洗衣机、椅子、ATM等

测试用例设计经典面试题之电梯、杯子、笔、桌子、洗衣机、椅子、ATM等  1.测试项目:电梯   需求测试:查看电梯使用说明书、安全说明书等   界面测试:查看电梯外观   功能测试:测试电梯能否实现正常的上升和下降功能.电梯的按钮是否都可以用;   电梯门的打开,关闭是...
  • zouhui1003it
  • zouhui1003it
  • 2016-12-23 19:55
  • 605

字符串全排列 java实现

经常会遇到字符串全排列的问题。例如:输入为{‘a’,’b’,’c’},则其全排列组合为abc,acb,bac,bca,cba,cab。对于输入长度为n的字符串数组,全排列组合为n!种。思路:从字符串数组中每次选取一个元素,作为结果中的第一个元素。然后,对剩余的元素全排列,步骤跟上面一样。很明显这是个...
  • bitcarmanlee
  • bitcarmanlee
  • 2016-06-01 19:05
  • 8428

一个经典的JavaScript面试题

题目如下: function Foo() { getName = function () { alert (1); }; return this; } Foo.getName = function () { alert (2);}; Foo.prototype.getName ...
  • gongzhuxiaoxin
  • gongzhuxiaoxin
  • 2016-09-01 16:10
  • 1025
    个人资料
    • 访问:16356次
    • 积分:512
    • 等级:
    • 排名:千里之外
    • 原创:35篇
    • 转载:2篇
    • 译文:0篇
    • 评论:1条
    最新评论