//记录今晚为freecodecamp的norepeat找到自己的解法
//norepeat的意思为:找到一串字符串的所有排列组合方式,相邻的字母不能重复
// "aab" => "aba" 和 "aba"和 虽然这两个字符串相等,但a在原始字符串中的index是不同的
var str = "abcde"
function permAlone(str) {
var strArr = str.split('')
var result = [];
function permutate(arr, accumlatedStr) {
arr.forEach((letter, index) => {
//如果积攒的字符串不存在,说明是第一次遍历
//或者如果已经积攒的字符串的最后一个字符 不等于 当前遍历到的字母
if(!accumlatedStr || accumlatedStr.substr(-1) !== letter) {
//累加字符串
var tempStr = accumlatedStr ? accumlatedStr + letter : letter;
//复制当前数组,保持immutable
var rest = arr.slice();
//把当前字母剔除
rest.splice(index, 1)
//如果剩余字符串的长度大于1,递归遍历
if(rest.length > 1) {
permutate(rest, tempStr)
//等于1的情况
} else {
//如果剩下的这个字母跟累加的字符串的最后一个字母不相等的情况下,把最终的字符串push到结果数组中,结束本次字符串的收集
if(tempStr.substr(-1) !== rest[0]) {
result.push(tempStr + rest[0])
}
}
}
})
}
permutate(strArr)
return result
}
var res = permAlone(str)
console.log(res)
No Repeats Please - freecodecamp
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 这里是新概念英语资源系列~介绍一下本系列内容: 1、沪江网上分享讲课视频(如果有) 2、电子书图片 3、英音美音m...
- 朕最近又开始调研ionic了,半年没用发现ionic cli已经升级了,在执行ionic cordova buil...
- 首先出现这个问题是由于官方的repository里面没有我们需要的rpm包,所以我们可以先试一下换源难呢过不能解决...