题目链接:https://www.w3cschool.cn/codecamp/no-repeats-please.html
解题思路:1.找出所有排列的可能集合(这种方法是我的第一想法比较笨,网上应该还有其他解法)
2.减去集合中有连续重复的
其中主要的就是找出所有可能的集合,这是我的大致思路
代码:
function permAlone(str){
if(str.length===1) return 1;
//大致思路:先排列,后插空 存储两两交换后的数组,每增加一个新的元素对其进行插空
var all=str.substr(0,1); //所有可能的集合
var arr=[];
// 补充:str.substr(index,length)从索引的起始位置提取制定长度的字符串
for(var i=1;i<str.length;i++){
var temp=str.substr(i,1);
all=charu(all,temp);
}
// 获得了all,接下来判断连续的非连续的+1即可
var count=0;
for(var i=0;i<all.length;i++){
var target=true;
for(var j=0;j<all[i].length;j++){
//判断条件连续两个相等不加
if(all[i][j]==all[i][j+1]){
target=false;
}
}
if(target){
count++;
}
}
console.log(count);
return count;
}
function charu(old,temp){
var carr=[];
for(var i=0;i<old.length;i++){
for(var j=0;j<old[i].length+1;j++){
var start=old[i].substr(0,j);
var end=old[i].substr(j,old[i].length);
var ok=start + temp + end;
carr.push(ok);
}
}
return carr;
}
permAlone('acc');
写完后可以跟网上其他的大佬对照一下,代码可以更加的精简