我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

总结

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

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

这篇文章主要介绍了javascript如何返回字符串的所有排列问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-17

javascript如何替换所有字符串

小编给大家分享一下javascript如何替换所有字符串,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScript的作用是什么1、能够嵌入动态文本于HTM
2023-06-15

JavaScript如何替换所有出现的字符串

这篇文章主要为大家展示了“JavaScript如何替换所有出现的字符串”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript如何替换所有出现的字符串”这篇文章吧。如何替换所有出现的字
2023-06-27

PHP如何返回字符串的长度

本篇文章详细阐述了PHP获取字符串长度的多种方法,包括strlen()函数、mb_strlen()函数、count()函数等。这些方法适用于不同的情况,如简单字符串、多字节字符串和数组或对象。选择哪种方法取决于具体场景和字符串的复杂程度。
PHP如何返回字符串的长度
2024-04-02

Java如何返回字符串的长度

Java中获取字符串长度的方法包括:String.length():返回字符数量,不考虑代理对。Character.codePointCount():返回Unicode代码点数量,考虑代理对。Grapheme.length():返回字符графема数量,考虑单个字符可能由多个Unicode字符表示的情况。选择方法取决于需要考虑的因素,如代理对、字符графема和效率。示例代码比较了这些方法在不同字符串上的性能,显示出Character.codePointCount()和Grapheme.length(
Java如何返回字符串的长度
2024-04-02

Python如何返回字符串的长度

本文介绍了获取Python字符串长度的方法,重点推荐使用len()函数,它直接返回字符数量,性能优异。此外,还介绍了循环遍历和len方法等其他方法,但性能不如len()函数。使用len()函数是获取Python字符串长度最简单、最有效的方法。
Python如何返回字符串的长度
2024-04-02

PHP如何返回有关字符串中使用的字符的信息

本文讨论了PHP中获取字符串字符信息的方法,包括确定字符使用情况、检查字符是否存在、获取Unicode代码点等。提供了常用的函数,如count_chars()、str_split()、strpos()等,并给出了示例代码。此外,文中还提供了最佳实践,如选择合适的函数、优化代码性能、处理非ASCII字符串等,以帮助开发者有效地处理字符串数据。
PHP如何返回有关字符串中使用的字符的信息
2024-04-02

Java如何返回有关字符串中使用的字符的信息

Java提供多种方法获取字符串字符信息。可计算字符出现次数(indexOf、lastIndexOf、length),查找特定字符的位置(indexOf、lastIndexOf、startsWith、endsWith),以及提取字符串子部分(substring、split)。示例展示了如何使用这些方法。此外,还提供了其他方法,如codePointAt、regionMatches、matches和replace,可实现更为复杂的操作。
Java如何返回有关字符串中使用的字符的信息
2024-04-02

Java如何返回字符串的一部分

Java提供多种方法返回字符串的一部分,包括:使用substring()返回指定范围内的子字符串使用charAt()返回指定索引处的字符使用indexOf()/lastIndexOf()查找字符/子字符串的位置使用split()按照模式拆分字符串使用replace()替换指定的字符/子字符串使用StringTokenizer根据分隔符拆分字符串使用ApacheCommonsStringUtils库
Java如何返回字符串的一部分
2024-04-02

PHP如何返回字符串的一部分

本文全面介绍了PHP中返回字符串一部分的方法,包括substr()函数、substrin()方法、slice()方法、字符串访问器和正则表达式。这些方法的用法示例、注意事项和返回类型都得到了详细说明,帮助开发者从字符串中高效提取所需内容。
PHP如何返回字符串的一部分
2024-04-02

Python如何返回字符串的一部分

摘要:Python字符串切片可返回字符串的一部分。语法为:string[start:end:step],其中start和end分别指定起始和结束索引,step指定步长。正向切片从头开始,反向切片使用负索引。step可指定遍历间隔。高级切片选项包括复制字符串、反转字符串等。掌握字符串切片可高效操作字符串,提取所需数据。
Python如何返回字符串的一部分
2024-04-02

PHP如何返回格式化的字符串

PHP提供了丰富的字符串格式化函数,如sprintf、printf和str_pad,用于根据指定格式对字符串进行调整和布局。其中,sprintf使用格式字符串和参数格式化输出,vsprintf允许作为数组传递参数,printf将格式化字符串写入输出缓冲区。str_pad用于通过指定字符填充字符串,str_repeat用于重复指定的字符串。通过使用占位符、格式说明符和number_format函数,可以在不同的语言和格式约定下灵活地格式化字符串,满足特定输出需求。
PHP如何返回格式化的字符串
2024-04-02

编程热搜

目录