获取题库不需要订阅专栏,可直接私信我进入CSDN领军人物top1博主的华为OD交流圈观看完整题库、最新面试实况、考试报告等内容以及大佬一对一答疑。
题目描述
给定一个只包含大写英文字母的字符串S,要求你给出对S重新排列的所有不相同的排列数。
如:S为ABA,则不同的排列有ABA、AAB、BAA三种。
输入描述
输入一个长度不超过10的字符串S,我们确保都是大写的。
输出描述
输出S重新排列的所有不相同的排列数(包含自己本身)。
用例
输入 ABA
输出 3
说明 无
输入 ABCDEFGHHA
输出 907200
说明 无
题目解析
给定一个只包含大写英文字母的字符串S。
需要找出S的所有不同排列数。
解题思路:
这是一个典型的排列问题,可以使用回溯法(深度优先搜索)来解决。
从字符串的第一个字符开始,逐个选择字符进行排列,并递归处理剩余的字符。
使用一个visited数组来记录字符是否被使用过,以避免产生重复的排列。
当字符串的所有字符都被使用过,并且生成了一个排列时,计数器加一。
算法复杂度:
时间复杂度:O(n!),其中n是字符串的长度。因为对于n个字符,有n!种排列方式。
空间复杂度:O(n),其中n是字符串的长度。需要使用visited数组和递归栈空间。
java算法源码
import java.util.Scanner;
public class StringPermutations {