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 相关文章推荐
关于捕获用户何时点击window.onbeforeunload的取消事件
Mar 06 Javascript
JavaScript中的作用域链和闭包
Jun 30 Javascript
深入解读JavaScript中的Hoisting机制
Aug 12 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
Nov 17 Javascript
Node.js如何自动审核团队的代码
Jul 20 Javascript
jquery实现一个全局计时器(商城可用)
Jun 30 jQuery
基于ExtJs在页面上window再调用Window的事件处理方法
Jul 26 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
Aug 24 jQuery
JS实现获取word文档内容并输出显示到html页面示例
Jun 23 Javascript
ES6中let 和 const 的新特性
Sep 03 Javascript
layui监听select变化,以及设置radio选中的方法
Sep 24 Javascript
如何在Vue.JS中使用图标组件
Aug 04 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
CodeIgniter CLI模式简介
2014/06/17 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
用js实现下载远程文件并保存在本地的脚本
2008/05/06 Javascript
Javascript将string类型转换int类型
2010/12/09 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
javascript实现uploadify上传格式以及个数限制
2015/11/23 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
js重写方法的简单实现
2016/07/10 Javascript
JavaScript中ES6 Babel正确安装过程
2016/07/18 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
jquery Ajax实现Select动态添加数据
2017/06/08 jQuery
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
bootstrap table服务端实现分页效果
2017/08/10 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
python求斐波那契数列示例分享
2014/02/14 Python
Python自动登录126邮箱的方法
2015/07/10 Python
python GUI实例学习
2017/11/21 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
selenium+python自动化测试之页面元素定位
2019/01/23 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
在django中查询获取数据,get, filter,all(),values()操作
2020/08/09 Python
python实现移动木板小游戏
2020/10/09 Python
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
音乐系毕业生自荐信
2013/10/27 职场文书
公司员工离职证明书
2014/10/04 职场文书
肖申克救赎观后感
2015/06/02 职场文书
死亡诗社观后感
2015/06/05 职场文书
Python爬虫之爬取二手房信息
2021/04/27 Python