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 列表框(multiselect)的动态添加列表项的方法
Jul 31 Javascript
利用js 进行输入框自动匹配字符的小例子
Jun 29 Javascript
javascript+canvas实现刮刮卡抽奖效果
Jul 29 Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 Javascript
Vue.js每天必学之指令系统与自定义指令
Sep 07 Javascript
Java  Spring 事务回滚详解
Oct 17 Javascript
canvas滤镜效果实现代码
Feb 06 Javascript
Bootstrap路径导航与分页学习使用
Feb 08 Javascript
微信小程序中转义字符的处理方法
Mar 28 Javascript
vue router总结 $router和$route及router与 router与route区别
Jul 05 Javascript
jQuery实现简单弹幕效果
Nov 28 jQuery
详解Vue2的diff算法
Jan 06 Vue.js
详解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 checkbox 取值详细说明
2010/08/19 PHP
如何使用PHP给图片加水印
2016/10/12 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
如何在PHP环境中使用ProtoBuf数据格式
2020/06/19 PHP
解javascript 混淆加密收藏
2009/01/16 Javascript
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
Javascript学习笔记4 Eval函数
2010/01/11 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
图解js图片轮播效果
2015/12/20 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
[01:54]TI珍贵瞬间系列(五):压力
2020/08/29 DOTA
python处理json数据中的中文
2014/03/06 Python
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
Python中强大的命令行库click入门教程
2016/12/26 Python
python监控键盘输入实例代码
2018/02/09 Python
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
求职自荐信范文格式
2013/11/29 职场文书
后勤部经理岗位职责
2014/02/23 职场文书
家长反馈意见及建议
2015/06/03 职场文书
2015年四年级班主任工作总结
2015/10/22 职场文书
2019年XX公司的晨会制度及流程!
2019/07/23 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS