js-FCC算法-No repeats please字符串的全排列(详解)


Posted in Javascript onMay 02, 2017

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

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

从网上资料获得了一些思路,我的代码:

function permAlone(str) {
 var arr=str.split("");
 var perarr=[];
 var begin=0;
 //创建正则,如果字符串全重复,则直接return 0
 var reg = /(.)\1+/g;
 if(str.match(reg)!==null&&str.match(reg)[0]===str){
  return 0;
 }
 //用于交换的函数
 function swap(idx1,idx2){
   var temp=arr[idx1];
   arr[idx1]=arr[idx2];
   arr[idx2]=temp;
 }
 //如果begin到了最后一个字符,可以将这个字符串加入到全排列数组中了
 function permall(arr,begin){
  if(begin==arr.length-1){
   perarr[perarr.length]=arr.join("");
   return;
  }
  for(var i=0;(i+begin)<arr.length;i++){
   swap(begin,begin+i);
   permall(arr,begin+1);
   swap(begin,begin+i);
  }
 }
 permall(arr,begin);
 //返回相邻不重复的数量
 return perarr.filter(function(val) {
   return !val.match(reg);
 }).length;
}

permAlone('aab');

首先,把第一个字符和其后面的字符一一交换。

接着,固定第一个字符,求后面所有字符的排列。这个时候我们仍把后面的所有字符分成两部分:后面字符的第一个字符,以及这个字符之后的所有字符。然后把第一个字符逐一和它后面的字符交换。

去重的全排列就是从第一个数字起每个数分别与它后面非重复出现的数字交换。

以上这篇js-FCC算法-No repeats please字符串的全排列(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
鼠标图片振动代码
Jul 06 Javascript
jQuery 树形结构的选择器
Feb 15 Javascript
jQuery EasyUI API 中文文档 - Spinner微调器使用
Oct 21 Javascript
javascript获取重复次数最多的字符
Jul 08 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
Jul 13 Javascript
如何提高javascript加载速度
Dec 26 Javascript
JavaScript 详解预编译原理
Jan 22 Javascript
js中删除数组中的某一元素实例(无下标时)
Feb 28 Javascript
Angular中使用MathJax遇到的一些问题
Dec 15 Javascript
JavaScript闭包原理与用法实例分析
Aug 10 Javascript
JS中appendChild追加子节点无效的解决方法
Oct 14 Javascript
JS数组属性去重并校验重复数据
Jan 10 Javascript
详解webpack+es6+angular1.x项目构建
May 02 #Javascript
jQuery Tree Multiselect使用详解
May 02 #jQuery
bootstrap的常用组件和栅格式布局详解
May 02 #Javascript
Vuejs实现带样式的单文件组件新方法
May 02 #Javascript
基于bootstrap实现bootstrap中文网巨幕效果
May 02 #Javascript
老生常谈js-react组件生命周期
May 02 #Javascript
js 用于检测类数组对象的函数方法
May 02 #Javascript
You might like
《神奇女侠:血脉》神力女超人大战犯罪公司
2020/04/09 欧美动漫
千呼万唤始出来,DOTA2勇士令状不朽宝藏Ⅱ现已推出
2020/08/25 DOTA
PHP脚本中include文件出错解决方法
2008/11/20 PHP
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
php学习笔记 数组遍历实现代码
2011/06/09 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
php取出数组单个值的方法
2018/03/12 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
javascript实现颜色渐变的方法
2013/10/30 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
前端开发之便利店收银系统代码
2019/12/27 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
python递归下载文件夹下所有文件
2019/08/31 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
现代化办公人员工作的自我评价
2013/10/16 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
医德医风个人总结
2015/02/28 职场文书
法律意见书范文
2015/06/04 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
话题作文之关于呼唤
2019/11/29 职场文书
redis配置文件中常用配置详解
2021/04/14 Redis
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android