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 14 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
Jul 25 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
Jan 25 Javascript
利用javascript打开模态对话框(示例代码)
Jan 11 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
Dec 03 Javascript
利用原生JS自动生成文章标题树的实例
Aug 22 Javascript
jQuery弹出窗口打开链接的实现代码
Dec 24 Javascript
javascript实现复选框全选或反选
Feb 04 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
May 26 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
Aug 25 Javascript
vue 地区选择器v-distpicker的常用功能
Jul 23 Javascript
Vue实现购物车基本功能
Nov 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
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
Angular排序实例详解
2017/06/28 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
如何使用vue slot创建一个模态框的实例代码
2020/05/24 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
python中if及if-else如何使用
2020/06/02 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
python 获取计算机的网卡信息
2021/02/18 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
芬兰设计商店美国:Finnish Design Shop US
2019/03/25 全球购物
生物技术研究生自荐信
2013/11/12 职场文书
老同学聚会感言
2014/02/23 职场文书
开工仪式主持词
2014/03/20 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
民间借贷纠纷起诉书
2015/08/03 职场文书
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS
SQL实现LeetCode(177.第N高薪水)
2021/08/04 MySQL
解决Redis启动警告问题
2022/02/24 Redis
MySQL分区路径子分区再分区
2022/04/13 MySQL