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 相关文章推荐
jquery用offset()方法获得元素的xy坐标
Sep 06 Javascript
原生js实现图片轮播特效
Dec 18 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
Apr 12 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
Jul 13 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
Feb 10 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
Jul 12 Javascript
重新认识vue之事件阻止冒泡的实现
Aug 02 Javascript
Vue-CLI3.x 设置反向代理的方法
Dec 06 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
Jan 03 Javascript
简单了解node npm cnpm的具体使用方法
Feb 27 Javascript
微信小程序仿通讯录功能
Apr 09 Javascript
OpenLayers3实现地图显示功能
Sep 25 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
php中常用的预定义变量小结
2012/05/09 PHP
php 过滤英文标点符号及过滤中文标点符号代码
2014/06/12 PHP
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
php微信开发之谷歌测距
2018/06/14 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
checkbox使用示例
2013/08/23 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
基于jQuery实现点击最后一行实现行自增效果的表格
2016/01/12 Javascript
通过button将form表单的数据提交到action层的实例
2017/09/08 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
原生js实现照片墙效果
2020/10/13 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
2017/12/03 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
python实现图像拼接功能
2020/03/23 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
服装创业计划书范文
2014/02/05 职场文书
廉洁使者实施方案
2014/03/29 职场文书
李白故里导游词
2015/02/12 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
李强为自己工作观后感
2015/06/11 职场文书