广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >javascript如何返回字符串的所有排列
  • 911
分享到

javascript如何返回字符串的所有排列

摘要

目录js返回字符串的所有排列需求代码一点思路js实现字符串全排序总结js返回字符串的所有排列 需求 返回一个字符串所有的排列 输入:一个字符串输出:一个包含该字符串所有排列情况的数组

js返回字符串的所有排列

需求

返回一个字符串所有的排列

  • 输入:一个字符串
  • 输出:一个包含该字符串所有排列情况的数组

代码

const anagrams = str => {
  if (str.length <= 2) {
         return str.length === 2 ? [str, str[1] + str[0]] : [str];
  }
  else{
      return str.split('').reduce((acc, letter, i) =>
    acc.concat(anagrams(str.slice(0, i) + str.slice(i + 1)).map(val => letter + val)), []);
    }
};

效果

这里写图片描述

一点思路

递归、长度为阶乘

js实现字符串全排序

这是一道经典的算法题,学过排列组合的童鞋们都知道长度为n的字符串其全排序大小为n! (这里不考虑字符串里有重复字符,不做去重处理)。

网上有各种语言的实现算法,但js语言实现的比较少(果然藐视【划掉】忽略我广大前端er的算法水平)。另外,网上实现的多为递归方法。这里用非递归的js实现一下,轻拍。

先说一下思路:单个字符的串,比如a全排序为1(废话忽略)。

两个字符的串比如ab,全排序数为2,即:ab和ba。那我们不禁要问,你是怎么得到的?

解答如下:

  • 第一步————先拿出a,那么a的前面和a的后面产生两个空位,如图:0 a 0。
  • 第二步————将b分别放在两个空位里,得到ba和ab。
  • 第三步————sorry,没有第三步。

好了,那三个字符abc你怎么办?

其实还是老办法,只不过我们是建立在刚才的2个字符组成的串已经全排完的基础上。

  • 第一步————拿出刚才产生的ba,它产生了三个空位,如图:0 b 0 a 0.
  • 第二步————把剩余的c分别插入这三个空位,得到cba,bca和bac。
  • 现在我们的ba已经被利用完了,还有ab没用,ok,我们现在来用它重复上面的步骤,得到cab,acb和abc。

那四个字符abcd组成的串呢?

聪明的你一定想到用刚才三个字符产生的结果,每个串生成4个空位,然后把d分别放在这4个空位里。

至此,我们的算法思路就已经说完了。现在开始用代码实现。

function myPermutation(str){
        // 空字符串直接返回吧
	if(str.length === 0){
		console.log('The string you input have No length!');
		return;
	}
        // 一个字符也不用运算
	if(str.length === 1){
		console.log('The result array is: ' + str, '-&- The array length is: ' + str.length);
		return;
	}
        // 长度2以上的开始计算
        
 
	var arrayStr = str.split('');
        
        // 你开始拿第4个字符去填充空位,那前3个字符的全排列就已经都存储在中间数组里了
 
	var transArray = [];
        
	transArray.push(arrayStr[0]);
        // 定义一个存储最终结果的数组,作为返回值
	var resultArray = [];
        
	for(var i = 1; i < arrayStr.length; i++){
		resultArray = [];
            // 每次新取到的字符
		var addChar = arrayStr[i];
            
		for(var j = 0; j < transArray.length; j++){
                // 依次取中间数组里的串
			var toBeInsertStr = transArray[j];
                // 用空格分割字符串,从而产生空位
			var toBeInsertStrArray = toBeInsertStr.split('');
                // 第三层循环,将取到的新字符分别放到空位上形成字符串,有多少空位就循环几次
			for (var k = 0; k <= transArray[j].length; k++){
				tempArray = toBeInsertStrArray.concat();
                // 用splice函数处理,表示将字符填入空位
				var insertedArray = toBeInsertStrArray.splice(k, 0, addChar);
                    // 刚才是数组操作,现在转成字符串
				var transArrayItem = toBeInsertStrArray.join('');
                    // 将字符串压入结果数组
				resultArray.push(transArrayItem);
				toBeInsertStrArray = tempArray.concat();
			}
		}
		transArray = [];
		transArray = resultArray.concat();
	}
	console.log('The result array is: ' + resultArray, '-&- The array length is: ' + resultArray.length);
}
 
myPermutation('');
myPermutation('a');
myPermutation('ab');
myPermutation('abc');

运行结果:

The string you input have No length!
The result array is: a -&- The array length is: 1
The result array is: ba,ab -&- The array length is: 2
The result array is: cba,bca,bac,cab,acb,abc -&- The array length is: 6

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: javascript如何返回字符串的所有排列

本文链接: https://www.lsjlt.com/news/178011.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • javascript如何返回字符串的所有排列
    目录js返回字符串的所有排列需求代码一点思路js实现字符串全排序总结js返回字符串的所有排列 需求 返回一个字符串所有的排列 输入:一个字符串输出:一个包含该字符串所有排列情况的数组...
    99+
    2023-01-17
    javascript字符串 javascript返回字符串 返回字符串所有排列
  • 怎么通过JavaScript函数生成字符串的所有排列组合
    本篇内容主要讲解“怎么通过JavaScript函数生成字符串的所有排列组合”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么通过JavaScript函数生成字符...
    99+
    2022-10-19
  • javascript如何替换所有字符串
    小编给大家分享一下javascript如何替换所有字符串,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScript的作用是什么1、能够嵌入动态文本于HTM...
    99+
    2023-06-15
  • javascript字符串替换所有字符的方法
    本篇内容主要讲解“javascript字符串替换所有字符的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript字符串替换所有字符的方法”吧!在...
    99+
    2022-10-19
  • Python函数如何返回字符串
    使用Python函数返回字符串的方法lower()函数返回字符串 a = "Hello, World!"print(a.lower())输出结果为:Hello, World!使用upper()返回字符串a = "Hello, World!"...
    99+
    2022-10-25
  • JavaScript如何过滤并排序字符串列表
    小编给大家分享一下JavaScript如何过滤并排序字符串列表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!过滤并排序字符串列表...
    99+
    2022-10-19
  • javascript如何去除字符串的所有逗号
    本篇内容介绍了“javascript如何去除字符串的所有逗号”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2022-10-19
  • JavaScript如何替换所有出现的字符串
    这篇文章主要为大家展示了“JavaScript如何替换所有出现的字符串”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript如何替换所有出现的字符串”这篇文章吧。如何替换所有出现的字...
    99+
    2023-06-27
  • Ajax如何实现返回字符串的过滤
    这篇文章主要介绍“Ajax如何实现返回字符串的过滤”,在日常操作中,相信很多人在Ajax如何实现返回字符串的过滤问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Ajax如何实现...
    99+
    2022-10-19
  • php中如何限制返回字符串的长度
    PHP 是一种广泛使用的服务器端脚本语言,用于创建动态网页。在 PHP 中,查询数据库是经常使用的操作。当我们查询数据库时,经常会遇到返回的字符串长度超过限制的情况。那么在 PHP 中,如何限制返回字符串的长度呢?一、substr...
    99+
    2023-05-14
  • python如何将列表中的所有元素组合成字符串
    这篇文章主要为大家展示了“python如何将列表中的所有元素组合成字符串”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何将列表中的所有元素组合成字...
    99+
    2022-10-19
  • 如何返回所有JavaScript变量的构造函数
    本篇内容主要讲解“如何返回所有JavaScript变量的构造函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何返回所有JavaScript变量的构造函数”吧...
    99+
    2022-10-19
  • python如何去掉字符串所有空格
    这篇文章给大家分享的是有关python如何去掉字符串所有空格的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python去掉字符串所有空格的方法:1、使用strip方法去除字符串开头或者结尾的空格;2、使用repl...
    99+
    2023-06-06
  • es6如何去掉字符串所有空格
    这篇文章主要介绍“es6如何去掉字符串所有空格”,在日常操作中,相信很多人在es6如何去掉字符串所有空格问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”es6如何去掉字符串所有...
    99+
    2022-10-19
  • 如何从 MySQL 中的字符串中删除所有非字母数字字符?
    非字母数字字符如下 - @,!,#,&,(),, / MySQL 中没有内置函数可以从字符串中删除非字母数字字符。因此,我们创建一个删除所有非字母数字字符的函数。函数声明和定义如下。 mysql> delimiter // my...
    99+
    2023-10-22
  • javascript如何计算字符串有几个字符
    这篇文章给大家分享的是有关javascript如何计算字符串有几个字符的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 JS统计字符个数的方法:1、利用...
    99+
    2022-10-19
  • 决ajax异步请求返回的是字符串如何解决
    这期内容当中小编将会给大家带来有关决ajax异步请求返回的是字符串如何解决,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.返回结果差异js获取后打印res.code无结果。因为返回数据格式不正确。php...
    99+
    2023-06-08
  • php如何去掉字符串中的所有空格
    本篇内容主要讲解“php如何去掉字符串中的所有空格”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php如何去掉字符串中的所有空格”吧!php去掉字符串中所有空格的方法:1、使用str_repla...
    99+
    2023-06-29
  • 如果搜索字符串不在 FIELD() 函数中作为参数提供的字符串列表中,MySQL 将返回什么?
    假设如果搜索字符串不在FIELD()函数中作为参数提供的字符串列表中,那么MySQL将返回0作为输出。示例mysql> Select FIELD('Ram','New','Delhi')...
    99+
    2023-10-22
  • JavaScript如何计算字符串中的字符
    这篇文章主要介绍了JavaScript如何计算字符串中的字符,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如何计算字符串中的字符可以使用length属性。const ...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作