最强解析面试题:字符串全排列「建议收藏!」
Posted 魏小言
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最强解析面试题:字符串全排列「建议收藏!」相关的知识,希望对你有一定的参考价值。
最强解析面试题:字符串全排列「建议收藏!」
文章讲解 “ 字符串全排列 ” 经典面试题,包含思路及源码,及解惑!
题目
输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。
例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。
示例1
输入:
“ab”
返回值:
[“ab”,“ba”]
说明:
返回[“ba”,“ab”]也是正确的
思路
1、通过递归处理,从首字母开始依次替换后续字母的位置,可得到全部字符排列
2、存在重复字母时,排列中会存在重复,故去重
代码
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param str string字符串
* @return string字符串一维数组
*/
func Permutation(str string) []string {
// write code here
var res []string
strArr := []byte(str)
m := make(map[string]struct{})
if len(strArr) <= 0 {
return res
}
resTmp := Res(strArr, 0)
for i, _ := range resTmp {
if _, ok := m[resTmp[i]]; !ok {
m[resTmp[i]] = struct{}{}
res = append(res, resTmp[i])
}
}
return res
}
func Res(str []byte, index int) []string {
var res []string
if index == len(str)-1 {
res = append(res, string(str))
return res
}
for i := index; i <= len(str)-1; i++ {
str[i], str[index] = str[index], str[i]
//res = append(res,string(str))
res = append(res, Res(str, index+1)...)
str[i], str[index] = str[index], str[i]
}
return res
}
附录
忙碌和早起
以上是关于最强解析面试题:字符串全排列「建议收藏!」的主要内容,如果未能解决你的问题,请参考以下文章