剑指 Offer II 033. 变位词组

112 阅读1分钟

剑指 Offer II 033. 变位词组

给定一个字符串数组 strs ,将 变位词 组合在一起。 可以按任意顺序返回结果列表。

注意:若两个字符串中每个字符出现的次数都相同,则称它们互为变位词。

太简单 不解释,当然还有其他优化方法,以后再学

var isAnagram = function (s, t) {
  var len1 = s.length;
  var len2 = t.length;
  if (len1 !== len2) {
    return false;
  }
  var arr = new Array(26).fill(0);
  for (var i = 0; i < len1; i++) {
    ++arr[s[i].charCodeAt() - "a".charCodeAt()];
    --arr[t[i].charCodeAt() - "a".charCodeAt()];
  }
  return arr.every((v) => v === 0);
};

var groupAnagrams = function (strs) {
  var obj = {};
  var f = function (s) {
    var keys = Object.keys(obj);
    if (keys.length) {
      var res = false;
      keys.forEach((item) => {
        if (isAnagram(item, s)) {
          res = item;
        }
      });
      return res;
    } else {
      return false;
    }
  };
  var len = strs.length;
  for (var i = 0; i < len; i++) {
    var res = f(strs[i]);
    if (res || res === "") {
      obj[res].push(strs[i]);
    } else {
      obj[strs[i]] = [strs[i]];
    }
  }
  return Object.values(obj);
};