js-FCC算法-No repeats please字符串的全排列
把一个字符串中的字符重新排列生成新的字符串,返回新生成的字符串里没有连续重复字符的字符串个数.连续重复只以单个字符为准
例如,
aab应该返回 2 因为它总共有6中排列 (aab,aab,aba,aba,baa,baa), 但是只有两个 (abaandaba)没有连续重复的字符 (在本例中是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字符串的全排列的更多相关文章
- js的 算法 和 数据结构
		js的 算法 1.对一个对象数组按照对象某个属性进行排序 : https://www.cnblogs.com/webcabana/p/7460038.html 在做公交的项目中就碰到过这种算法问题, ... 
- 总结下js排序算法和乱序算法
		其实本人最怕的就是算法,大学算法课就感觉老师在讲天书,而且对于前端来说,算法在实际的应用中实在是很有限.毕竟算法要依靠大量的数据为基础才能发挥出算法的效率,就浏览器那性能,......是吧,退一万步说 ... 
- C#算法之判断一个字符串是否是对称字符串
		记得曾经一次面试时,面试官给我电脑,让我现场写个算法,判断一个字符串是不是对称字符串.我当时用了几分钟写了一个很简单的代码. 这里说的对称字符串是指字符串的左边和右边字符顺序相反,如"abb ... 
- js 正则学习小记之匹配字符串
		原文:js 正则学习小记之匹配字符串 今天看了第5章几个例子,有点收获,记录下来当作回顾也当作分享. 关于匹配字符串问题,有很多种类型,今天讨论 js 代码里的字符串匹配.(因为我想学完之后写个语法高 ... 
- js 正则学习小记之匹配字符串优化篇
		原文:js 正则学习小记之匹配字符串优化篇 昨天在<js 正则学习小记之匹配字符串>谈到 个字符,除了第一个 个,只有 个转义( 个字符),所以 次,只有 次成功.这 次匹配失败,需要回溯 ... 
- js 正则学习小记之匹配字符串字面量优化篇
		昨天在<js 正则学习小记之匹配字符串字面量>谈到 个字符,除了第一个 个,只有 个转义( 个字符),所以 次,只有 次成功.这 次匹配失败,需要回溯后用 [^"] 才能匹配成功 ... 
- js冒泡法和数组转换成字符串示例代码
		将数组转换成字符串的方法有很多,讲解下js冒泡法的使用.js代码: //js冒泡法与数据转换为字符串的例子 //整理:www.jbxue.com window.onload = function(){ ... 
- 前台的js对象数组传到后台处理。在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>
		前台的js对象数组传到后台处理.在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<> 
- LeetCode初级算法的Python实现--字符串
		LeetCode初级算法的Python实现--字符串 # 反转字符串 def reverseString(s): return s[::-1] # 颠倒数字 def reverse(x): if x ... 
随机推荐
- linux 防火墙开启80端口永久保存
			经常使用CentOS的朋友,可能会遇到和我一样的问题.开启了防火墙导致80端口无法访问,刚开始学习centos的朋友可以参考下.经常使用CentOS的朋友,可能会遇到和我一样的问题.最近在Linux ... 
- CGPoint、CGSize、CGRect and UIView
			首先要弄懂几个基本的概念. 一)三个结构体:CGPoint.CGSize.CGRect 1. CGPoint /* Points. */ struct CGPoint { CGFloat x; CGF ... 
- Android 编译命令 make j8 2>&1 | tee build.log 解释
			在编译Android的时候,经常看到这样的命令 make -j8 2>&1 | tee build.log 其中 make 是编译命令, -j8 这里的 8 指的是线程数量,就是你要 ... 
- Map集合 总结
			(本人第一次写博客,部分内容有参照李刚老师的疯狂java系列图书,如有遗漏错误,请多指教,谢谢.) Java的集合类可分为Set.List.Map.Queue,其中Set.List.Queue都有共同 ... 
- FineUI参考手册(离线版)现已免费提供下载!
			http://fineui.com/bbs/forum.php?mod=viewthread&tid=3473 
- 支付宝Cookie高危漏洞引发的思考
			背景:当时我在做公司的网站支付接入,在调试支付宝WAP支付时,发现一些匪夷所思的事情: 1.我想要切换账号时退到需要输入登录信息时,原账号并没有退出,我按一下后退键又回来了: 2.我关闭浏览器也没有退 ... 
- sql server 字符串函数str()
			语法: STR(nExpres[,nLength[,nDecimalPlaces]]) 参数: nExpression------STR要计算的数值表达式. nLength------------ST ... 
- Android多线程文件下载
			版本信息 apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion " ... 
- Hibernate的三种状态
			Hibernate的对象有3种状态,分别为:瞬时态(Transient). 持久态(Persistent).脱管态(Detached).处于持久态的对象也称为PO(Persistence Objec ... 
- Thinkphp url 除去index.php
			例如你的原路径是 http://localhost/test/index.php/index/add那么现在的地址是 http://localhost/test/index/add如何去掉index. ... 
