当前位置: 代码迷 >> 综合 >> 242.有效的字母异位词
  详细解决方案

242.有效的字母异位词

热度:4   发布时间:2024-02-25 05:53:05.0

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

输入: s = "rat", t = "car"
输出: false

说明:
你可以假设字符串只包含小写字母。

进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?


思考

我开始的想的是,分别遍历s,t,用map存储里面的字母:数量。最后再一一比较。这样首先要遍历两次,而且键的顺序也不一定。

另一种思路,只需要用一个map。

首先判断两个长度是不是一样,不一样直接返回false.

然后同时遍历两个字符串,

s里的字母,存在的话,值+1,不存在的话,加到map,初始化为1.

t里的字母,存在的话,值-1,不存在的话,加到map,初始化为-1.

这样遍历结束,两个是异位词的话,必然所有键的值都是0.


/*** @param {string} s* @param {string} t* @return {boolean}*/var isAnagram = function(s, t) {if (s.length !== t.length) {return false}const map = new Map()for (let i = 0; i < s.length; i++) {//如果有s中字母,对应值加一if (map.has(s[i])) {map.set(s[i], map.get(s[i])+1)}else {//没有的字母,初始值设为1map.set(s[i],1)}//如果有t中的字母,对应值减一if(map.has(t[i])) {map.set(t[i], map.get(t[i])-1)}else {//没有出现过的初始值设为-1map.set(t[i], -1)}}//每次读的是item,item是一个数组[key,value]for (let ietm of map) {if (item[1] !== 0) {return false}}return true};

知识

1.遍历map的时候,用for of 才能返回。而且注意每次读取的是item,包含key和value.

  相关解决方案