LeetCode判定是否互为字符重排使用JavaScript解题|前端学算法

1,232 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情

有人相爱,有人夜里开车看海,我是leetcode第一题都做不出来

最近在学习数据结构,已经写了将近一个月的关于数组的算法

刚学会栈和队列这两种数据结构,还写了一篇关于栈,队列和链表三者之间的关系与区别的笔记

这一次准备写一个关于栈的算法

image.png

但是学会了栈并不代表会解关于栈的算法,解了半天没有解开,太伤心了

image.png

还是再找找自信吧,下次再搞栈

找一道简单的leetcode的题目,整点自信: 判定是否互为字符重排

判定是否互为字符重排

给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

示例 1:

输入: s1 = "abc", s2 = "bca"

输出: true

示例 2:

输入: s1 = "abc", s2 = "bad"

输出: false

解题思路

要判断两个字符重新排列是否相等,那么他俩肯定一样长,只有长度相同才有可能相等;两个字符相等那就是里面的元素是一样的,数量也一样,可以把字符串转化为数组后进行排序,一一对应就说明两个字符串相等,但是一个一个判断又太浪费性能,可以再次把数组转化为字符串进行比较

具体步骤如下:

  • 第一步:判断两个字符串长度是否一样,如果不是就返回 false

  • 第二步:如果长度一样,就把两个字符串转化为数组。

  • 第三步:把两个数组进行排序,然后再次转化为字符串进行比较,返回比较的结果。

var CheckPermutation = function(s1, s2) {
    if(s1.length !== s2.length){
        return false
    }else{
        let arr1 = [...s1]
        let arr2 = [...s2]
        return arr1.sort().join('') === arr2.sort().join('')
    }
};

image.png

顿时自信又来了

image.png

明天接着搞栈

知识点

  • 解构赋值: ...是ES6的解构语法的展开运算符;展开运算符用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中

  • sort() 方法对数组的项目进行排序。默认情况下,sort() 方法将按字母和升序将值作为字符串进行排序。

  • join()是将数组元素转换为字符串