242.有效的字母异位词

    科技2022-07-20  95

    给定两个字符串 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 { //没有的字母,初始值设为1 map.set(s[i],1) } //如果有t中的字母,对应值减一 if(map.has(t[i])) { map.set(t[i], map.get(t[i])-1) }else { //没有出现过的初始值设为-1 map.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.

    Processed: 0.013, SQL: 8