美文网首页让前端飞程序员
【Javascript】No Repeats Please

【Javascript】No Repeats Please

作者: 雨水之后 | 来源:发表于2017-11-30 09:10 被阅读0次

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

    例如,“aab”应该返回“2”,因为它总共有6中排列(aab, aab, aba, aba, baa, baa),但是只有两个(aba, aba)没有连续重复的字符 (在本例中是a)。

    function permAlone(str) {
    
      //使用正则回溯匹配连续重复
      var regex = /(.)\1+/g;
    
      //把字符串转化为数组,便于处理
      var arr = str.split('');
      //储存全排列数组
      var permutations = [];
      var tmp;
    
      //函数功能:对调位置
      function swap(index1, index2) {
        tmp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = tmp;
      }
    
      //使用Heap's Algorithm生成全排列数组
      function generate(int) {
        if (int === 1) {
          permutations.push(arr.join(''));
        } else {
          for (var i = 0; i != int; ++i) {
            generate(int - 1);
            swap(int % 2 ? 0 : i, int - 1);
          }
        }
      }
    
      generate(arr.length);
    
      //把没有连续重复排列的数组过滤出来
      var filtered = permutations.filter(function(string) {
        return !string.match(regex);
      });
    
      //返回其数量
      return filtered.length;
    }
    

    例如permAlone("aab")的结果输出为2。

    THE END.

    相关文章

      网友评论

        本文标题:【Javascript】No Repeats Please

        本文链接:https://www.haomeiwen.com/subject/mmimbxtx.html