js实现字符全排列算法的简单方法


Posted in Javascript onMay 01, 2017

实例如下:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>字符全排列</title>
</head>
<body>
   
 
<script>
function charsMap(o){
  o = (o+"").replace(/(\w)(?=\w*\1)/g,"").replace(/\s+/g,""); //去除重复字符以及空白字符
  switch(o.length){
    case 0: 
    case 1: return [o];
    default: 
      var p = /^(\S+?)(\S)$/.exec(o), //使用正则将字符串分割为n-1长度字符串,以及最后一个字符串。
        _r = charsMap(p[1]), 
        l = p[2], 
        r = [];
       
      for (var i = 0; i < _r.length; i++) {
        var t = _r[i];
        for (var j = 0, len = t.length; j <= len; j++) {
          r.push( t.replace( new RegExp("^(\\S{"+j+"})(\\S{"+(len-j)+"})$"), "$1"+l+"$2" ) ); 
          //字符插入位置从开头前到结尾后,正则的作用相当于Array.splice(j,0,l); 在下标j的位置插入一个字符l
        }
      }
      return r;
  }
}
 
var arr = "abcde";
var t = new Date().getTime();
var result = charsMap(arr);
document.write( "总耗时:"+(new Date().getTime()-t)+"ms" );
 
  var html = "<ul><li>" + result.join("</li><li>") + "</li></ul>";
  document.write(html);
</script>
</body>
</html>

以上这篇js实现字符全排列算法的简单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
根据分辨率不同,调用不同的css文件
Aug 25 Javascript
js类的静态属性和实例属性的理解
Oct 01 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
Jun 24 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
Nov 22 Javascript
JavaScript常用脚本汇总(三)
Mar 04 Javascript
初步了解javascript面向对象
Nov 09 Javascript
初识angular框架后的所思所想
Feb 19 Javascript
利用node.js本地搭建HTTP服务器
Apr 19 Javascript
vue脚手架及vue-router基本使用
Apr 09 Javascript
浅谈开发eslint规则
Oct 01 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
May 21 Javascript
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
Vue2.x中的父组件传递数据至子组件的方法
May 01 #Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
May 01 #jQuery
Bootstrap里的文件分别代表什么意思及其引用方法
May 01 #Javascript
node.js 抓取代理ip实例代码
Apr 30 #Javascript
socket.io学习教程之深入学习篇(三)
Apr 29 #Javascript
socket.io学习教程之基本应用(二)
Apr 29 #Javascript
socket.io学习教程之基础介绍(一)
Apr 29 #Javascript
You might like
c#中的实现php中的preg_replace
2009/12/21 PHP
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
两千行代码的PHP学习笔记汇总
2014/10/05 PHP
jQuery拖动div、移动div、弹出层实现原理及示例
2014/04/08 Javascript
node.js中的buffer.slice方法使用说明
2014/12/10 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
javascript实现网页字符定位的方法
2015/07/14 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
2015/08/06 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
JavaScript禁止用户多次提交的两种方法
2016/07/24 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
2016/09/01 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
AngularJS中$apply方法和$watch方法用法总结
2016/12/13 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
JavaScript中字符串的常用操作方法及特殊字符
2018/03/18 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
Python解决八皇后问题示例
2018/04/22 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
python实现指定ip端口扫描方式
2019/12/17 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
罗技美国官网:Logitech美国
2020/01/22 全球购物
weblogic面试题
2016/03/07 面试题
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"
2014/08/09 面试题
实习生单位鉴定意见
2013/12/04 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
银行业务授权委托书
2014/10/10 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python