Skip to main content

字符串的排列

  • 题源:《剑指 Offer: 面试题 38》P110
  • 在线:LeetCode: 46

题目

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

思路

  1. 把一个字符串看成由两部分组成:第一部分是它的第一个字符;第二部分是后面的所有字符。在图 4.18 中,我们用两种不同的背景颜色区分字符串的两部分。
  2. 我们求整个字符串的排列,可以看成两步。第一步求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换。图 4.18 就是分别把第-一个字符 a 和后面的 b、c 等字符交换的情形。第二步固定第一一个字符,如图 4.18 (a)所示,求后面所有字符的排列。这时候我们仍把后面的所有字符分成两部分:后面字符的第-一个字符,以及这个字符之后的所有字符。然后把第一个字符逐一和它后面的字符交换,如图 4.18 (b)所示。