2020-05-06
找不同
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
题解:
思路1:转为ASC2码后排序
var findTheDifference = function (s, t) { s = s.split('').sort((a, b) => a.charCodeAt() - b.charCodeAt()); t = t.split('').sort((a, b) => a.charCodeAt() - b.charCodeAt()); // 排序后 第一个不相等的就是新加入的 for (let i in s) { if (s[i] !== t[i]) return t[i]; } return t[t.length - 1]; // 遍历一遍没找到 说明插入在最后一个 }
思路2:哈希表
var findTheDifference = function (s, t) { let newMap = new Map(); // 新建一个Map存哈希 for (let v of s) { if (newMap.has(v)) newMap.set(v, newMap.get(v) + 1); // 将S字符串中的每一项存入哈希表中 else newMap.set(v, 1); } for (let v of t) { let val = newMap.get(v); // 再遍历T取每一项 有的话减掉1 if (val === 0 || val === undefined) return v; // 如果值为0 说明T比S多一个这个字符 如果为undefined 说明S中不存在这个字符 else newMap.set(v, val - 1); } }