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 相关文章推荐
javascrpt绑定事件之匿名函数无法解除绑定问题
Dec 06 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
Aug 06 Javascript
javascript中$(function() {});写与不写有哪些区别
Aug 10 Javascript
js实现图片放大和拖拽特效代码分享
Sep 05 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
Sep 15 Javascript
AngularJs Injecting Services Into Controllers详解
Sep 02 Javascript
jquery.Callbacks的实现详解
Nov 30 Javascript
js select下拉联动 更具级联性!
Apr 17 Javascript
详解Angular 4.x NgTemplateOutlet
May 24 Javascript
JS全角与半角转化实例(分享)
Jul 04 Javascript
node.js 模块和其下载资源的镜像设置的方法
Sep 06 Javascript
js实现简单分页导航栏效果
Jun 28 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 mail 通过Windows的SMTP发送邮件失败的解决方案
2009/05/27 PHP
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
JavaScript中出现乱码的处理心得
2009/12/24 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
json定义及jquery操作json的方法
2016/09/29 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
JS二叉树的简单实现方法示例
2017/04/05 Javascript
Angular2自定义分页组件
2017/04/19 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
JavaScript中的this基本问题实例小结
2020/03/09 Javascript
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
Python常见文件操作的函数示例代码
2011/11/15 Python
Python中请使用isinstance()判断变量类型
2014/08/25 Python
用Python中的__slots__缓存资源以节省内存开销的方法
2015/04/02 Python
20个常用Python运维库和模块
2018/02/12 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
中层干部竞争上岗演讲稿
2014/01/13 职场文书
政治表现评语
2014/05/04 职场文书
关于环保的活动方案
2014/08/25 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书
爱国之歌(8首)
2019/09/29 职场文书
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL