389.找不同

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);
  }
}

 

posted @ 2020-05-06 09:01  蓝小胖纸  阅读(165)  评论(0编辑  收藏  举报