No repeats please(待解)

要求

把一个字符串中的字符重新排列生成新的字符串,返回新生成的字符串里没有连续重复字符的字符串个数.连续重复只以单个字符为准

例如, 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');

你可能感兴趣的:(No repeats please(待解))