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

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

思路:

1.一个正则判断重复,把字符串换成数组,用ES6的解构和箭头函数来交换位置,array里面放字符串能组成的所有排列。

2.用一个生成函数来生成所有的排列,这里用的是Heap's Algorithm全排列算法,最后返回过滤掉重复的数组的长度即可。

let permAlone = str => {
  const reg = /(.)\1+/g,arr = str.split('') , array = [];
  let swap = (i1, i2) => [arr[i1],arr[i2]] = [arr[i2],arr[i1]];
  let generate = len => {
    if (len === 1) {
      array.push(arr.join(''));
    } else {
      for (let i = 0; i < len; i++) {
        generate(len - 1);
        swap(len % 2 ? 0 : i, len - 1);
      }
    }
  };
  generate(arr.length);
  return array.filter( str => !str.match(reg) ).length;
};
permAlone('aab');

  

如果有不明白的地方请留言,如果有更好更简便更优化的方法请留言,谢谢。

更多内容请访问我的个人博客:Bblog

最新文章

  1. UWP开发之Mvvmlight实践二:Mvvmlight的核心框架MVVM与MVC、MVP的区别(图文详解)
  2. java中Jbutton常用设置
  3. 【Python】Celery异步处理
  4. C语言:void指针
  5. bmob
  6. hdu 1010:Tempter of the Bone(DFS + 奇偶剪枝)
  7. 1.运行Android Studio,一直提示:Error running app: Instant Run requires &#39;Tools | Android | Enable ADB integration&#39; to be enabled.
  8. js 每秒刷新系统时间,可停止
  9. 动态加载Layout 与 论Activity、 Window、View的关系
  10. QTP 9.2 下载&amp;破解
  11. Java项目集成SAP BO
  12. 八数码问题+路径寻找问题+bfs(隐式图的判重操作)
  13. node.js学习系列(一)
  14. 转载:ThreadPoolExecutor 源码阅读
  15. mysql知识点总结
  16. Linux下SVN配置hook经验总结
  17. VS 窗体大小
  18. 【转】java基本数据类型vs封装数据类型
  19. WPF特效和例子
  20. Webbench进行网站压力测试

热门文章

  1. Redis从入门到精通【centos下的安装】
  2. 手把手详解持续集成之GitLab CI/CD
  3. python课程分享2-伊嬛
  4. 一位6年老Android面经总结
  5. Lesson 2-1 (数据结构,序列通用的操作)
  6. css3——border-image属性的用法
  7. percona-toolkit安装
  8. 使用Python批量下载Plus上的Podcast
  9. Win10 iot 修改日期时间
  10. Excel—数组