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 相关文章推荐
javascript实现日期格式转换
Dec 16 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
Mar 01 Javascript
window.open不被拦截的简单实现代码(推荐)
Aug 04 Javascript
修改jquery中dialog的title属性方法(推荐)
Aug 26 Javascript
微信小程序 数据绑定详解及实例
Oct 25 Javascript
微信小程序 网络请求(GET请求)详解
Nov 16 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
Jan 24 Javascript
详解node Async/Await 更好的异步编程解决方案
May 10 Javascript
解决vue keep-alive 数据更新的问题
Sep 21 Javascript
详解基于React.js和Node.js的SSR实现方案
Mar 21 Javascript
vue-next/runtime-core 源码阅读指南详解
Oct 25 Javascript
js实现聊天对话框
Feb 08 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
2020显卡排行榜天梯图 显卡天梯图2020年3月最新版
2020/04/02 数码科技
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
phpfans留言版用到的install.php
2007/01/04 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
PHP 类与构造函数解析
2017/02/06 PHP
如何离线执行php任务
2017/02/21 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
Laravel timestamps 设置为unix时间戳的方法
2019/10/11 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
jQuery 阴影插件代码分享
2012/01/09 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
jquery ztree实现树的搜索功能
2016/02/25 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
WxPython建立批量录入框窗口
2019/02/27 Python
Django REST framework 视图和路由详解
2019/07/19 Python
python中的列表与元组的使用
2019/08/08 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
简历中自我评价范文3则
2013/12/14 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
《初涉尘世》读后感3篇
2020/01/10 职场文书
js之ajax文件上传
2021/05/13 Javascript