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 相关文章推荐
ExtJS 2.0实用简明教程 之Border区域布局
Apr 29 Javascript
读jQuery之一(对象的组成)
Jun 11 Javascript
JavaScript异步回调的Promise模式封装实例
Jun 07 Javascript
javascript定时器完整实例
Feb 10 Javascript
JavaScript面向对象程序设计教程
Mar 29 Javascript
jquery获取form表单input元素值的简单实例
May 30 Javascript
react.js 翻页插件实例代码
Jan 19 Javascript
使用JavaScript开发跨平台的桌面应用详解
Jul 27 Javascript
JavaScript中in和hasOwnProperty区别详解
Aug 04 Javascript
详解Angular2学习笔记之Html属性绑定
Jan 03 Javascript
浅谈Javascript中的对象和继承
Apr 19 Javascript
js实现小时钟效果
Mar 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中使用gettext来支持多语言的方法
2011/05/02 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
$()JS小技巧
2007/07/21 Javascript
ajax 文件上传应用简单实现
2009/03/03 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
Node.js文件操作详解
2014/08/16 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
图片懒加载imgLazyLoading.js使用详解
2020/09/15 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[01:50:49]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第三场 1月24日
2021/03/11 DOTA
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
Python内置函数的用法实例教程
2014/09/08 Python
Python中的random()方法的使用介绍
2015/05/15 Python
利用python发送和接收邮件
2016/09/27 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
Python中extend和append的区别讲解
2019/01/24 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
阿拉伯时尚购物网站:Nisnass
2021/02/07 全球购物
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
会计系中文个人求职信
2013/12/24 职场文书
园艺师求职信
2014/04/27 职场文书
2014年行政执法工作总结
2014/12/11 职场文书
综合管理员岗位职责
2015/02/11 职场文书
法院个人总结
2015/03/03 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书