要求
把一个字符串中的字符重新排列生成新的字符串,返回新生成的字符串里没有连续重复字符的字符串个数.连续重复只以单个字符为准
例如, aab 应该返回 2 因为它总共有6中排列 (aab, aab, aba, aba, baa, baa), 但是只有两个 (aba and aba)没有连续重复的字符 (在本例中是 a).
解答
function permAlone(str) {
var perarr=[];
//创建正则,如果字符串全重复,则直接return 0
var reg = /(.)\1+/g;
if (str.match(reg) !== null && str.match(reg)[0] === str) {
return 0;
}
function recoper(str) {
var arr = [];//存放str的全排列
if (str.length > 1) {
var left = str[0];
var rest = str.slice(1, str.length);
//获取rest字符串的全排列
var perRes = recoper(rest);//?
var pl = perRes.length, pil, s;
for (var i = 0; i < pl; i++) {
s = perRes[i];
pil = perRes[i].length;
for (var j = 0; j <=pil; j++) {
var tmp = s.substring(0, j) + left + s.substring(j, pl);
arr.push(tmp);
}
}
} else if (str.length == 1) {
arr = [str];
}
return arr;
}
perarr=recoper(str);
//返回相邻不重复的数量
return perarr.filter(function(val) {
return !val.match(reg);
}).length;
}
permAlone('abcdefa');