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 相关文章推荐
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
Mar 20 Javascript
jQuery UI 应用不同Theme的办法
Sep 12 Javascript
基于JQuery的抓取博客园首页RSS的代码
Dec 01 Javascript
javascript真的不难-回顾一下基础知识
Jan 15 Javascript
js操纵dom生成下拉列表框的方法
Feb 24 Javascript
javascript将浮点数转换成整数的三个方法
Jun 23 Javascript
weUI应用之JS常用信息提示弹层的封装
Nov 21 Javascript
详解JavaScript模块化开发
Dec 04 Javascript
微信小程序 支付功能实现PHP实例详解
May 12 Javascript
详解webpack3如何正确引用并使用jQuery库
Aug 26 jQuery
Angular事件之不同组件间传递数据的方法
Nov 15 Javascript
js实现飞机大战游戏
Aug 26 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 COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
JS小框架 fly javascript framework
2009/11/26 Javascript
javascript两段代码,两个小技巧
2010/02/04 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
Python可跨平台实现获取按键的方法
2015/03/05 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
简单介绍Python中的decode()方法的使用
2015/05/18 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
Python之list对应元素求和的方法
2018/06/28 Python
python实现操作文件(文件夹)
2019/10/31 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
python在协程中增加任务实例操作
2021/02/28 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
allbeauty美国:英国在线美容店
2019/03/11 全球购物
研发工程师岗位职责
2014/04/28 职场文书
动物科学专业求职信
2014/07/27 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
教师求职自荐信范文
2015/03/04 职场文书
通讯稿范文
2015/07/22 职场文书
PHP遍历数组的6种方式总结
2021/11/17 PHP
我的收音机情缘
2022/04/05 无线电