持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
有人相爱,有人夜里开车看海,我是leetcode第一题都做不出来
最近在学习数据结构,已经写了将近一个月的关于数组的算法
刚学会栈和队列这两种数据结构,还写了一篇关于栈,队列和链表三者之间的关系与区别的笔记
这一次准备写一个关于栈的算法
但是学会了栈并不代表会解关于栈的算法,解了半天没有解开,太伤心了
还是再找找自信吧,下次再搞栈
找一道简单的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('')
}
};
顿时自信又来了
明天接着搞栈
知识点
-
解构赋值:
...是ES6的解构语法的展开运算符;展开运算符用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中 -
sort()方法对数组的项目进行排序。默认情况下,sort()方法将按字母和升序将值作为字符串进行排序。 -
join()是将数组元素转换为字符串