week1 2/14-2/17

242题

题干:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
解析:对比两个字符串

1.先排序再对比 快排 n*logn
2.map计数
3.空间更省

var isAnagram = function (s, t) {
  var chars = Array(26).fill(0);

  for (var i = 0; i < s.length; i++) {
    chars[s.charCodeAt(i) - 97]++;
  }

  for (var i = 0; i < t.length; i++) {
    chars[t.charCodeAt(i) - 97]--;
  }

  for (var i = 0; i < chars.length; i++) {
    if (chars[i] !== 0) {
      return false;
    }
  }

  return true;
};

4.不采用数组计数,直接在字符串上操作更加迅速
考虑循环的开始条件与终止条件,循环中间的操作

var isAnagram = function(s, t) {
    while(s!==t && s.length===t.length){
        const reg = new RegExp(s[0], 'g');
        s = s.replace(reg,'')
        t = t.replace(reg,'')
        if(s===t) return true;
        if(s.length!==t.length) return false;
    }
    return s===t
};

1题 两数之和

1.暴力法 两层循环依次查找 n^2的复杂度
2.x+y = target ie y = target - x
将寻找y的过程改为在set or map中的读操作(复杂度o(1)),这样在遍历x的过程中,存储下需要的y,以后每一次经过x的时候 先去map中去查询是否满足

你可能感兴趣的:(week1 2/14-2/17)