前端刷题路-Day7
分类:javascript
有效的字母异位词(题号242)
题目
给定两个字符串 s
和 t
,编写一个函数来判断 t
是否是 s
的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode
字符怎么办?你能否调整你的解法来应对这种情况?
链接
leetcode-cn.com/problems/va…
解释
这题本来只想到了用Map
或者对象来进行操作,想法比较简单,这里不多做赘述。那么剩下的一种方法就是给两个字符串进行排序,之后比较排序结果是否相等就好,这种方法比较简单,但是性能不好,并不推荐。
自己的答案(对象)
var isAnagram = function(s, t) {
var obj = new Map()
var sArr = s.split('')
var tArr = t.split('')
if (sArr.length !== tArr.length) return false
for (let index = 0; index < sArr.length; index++) {
const item = sArr[index];
if (!obj.has(item)) {
obj.set(item, 1)
} else {
obj.set(item, obj.get(item) + 1)
}
}
for (let index = 0; index < tArr.length; index++) {
const item = tArr[index];
if (!obj.has(item)) {
return false
} else {
var value = obj.get(item)
switch (value) {
case 0:
return false
case 1:
obj.delete(item)
break
default:
obj.set(item, obj.get(item) - 1)
break
}
}
}
if (obj.size === 0)return true
return false
};
这里用对象或者Map
都可以,性能上都细微差异
自己的答案(排序两次)
var isAnagram = function(s, t) {
return s.split('').sort().join('') === t.split('').sort().join('')
};
这就没啥可以说都,一行代码搞定,用toString()
也可以都。
更好都答案
var isAnagram = function(s, t) {
return s.length === t.length && Array.from(Array.from(s).reduce((h, v, i) => (h.set(v, (h.get(v) || 0) + 1), h.set(t[i], (h.get(t[i]) || 0) - 1), h), new Map).values()).every(v => !v)
};
这里就是用了reduce
,看上去高档一些
两数之和(题号1)
题目
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
提示:
2 <= nums.length <= 103
-109 <= nums[i] <= 109
-109 <= target <= 109
- 只会存在一个有效答案
链接
leetcode-cn.com/problems/tw…
解释
这没啥可解释都,看代码即可
自己的答案
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
var obj = new Map()
for (let index = 0; index < nums.length; index++) {
var item = nums[index];
if (obj.has(item)) {
return [obj.get(item), index]
}
obj.set(target - item, index)
}
};
PS:想查看往期文章和题目可以点击下面的链接:
这里是按照日期分类的?
前端刷题路-目录(日期分类)
经过有些朋友的提醒,感觉也应该按照题型分类
这里是按照题型分类的?
前端刷题路-目录(题型分类)
有兴趣的也可以看看我的个人主页?
Here is RZ