剑指 Offer II 034. 外星语言是否排序

108 阅读1分钟

剑指 Offer II 034. 外星语言是否排序

某种外星语也使用英文小写字母,但可能顺序 order 不同。字母表的顺序(order)是一些小写字母的排列。

给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;否则,返回 false。

  • 遍历words,握手法则两两比较,找到一个不满足条件的直接返回结果
  • 两字符串使用归并思想,
  • if (index1 < index2) {这个需要注意下,这里需要进一步判断 第二次for循环的,假如有的话

方法一:自己写的 感觉还阔以

var isAlienSorted = function (words, order) {
  for (var i = 0; i < words.length - 1; i++) {
    var s1 = words[i];
    var s2 = words[i + 1];
    while (s1.length || s2.length) {
      if (s1.length && s2.length) {
        var index1 = order.indexOf(s1.slice(0, 1));
        var index2 = order.indexOf(s2.slice(0, 1));
        if (index1 < index2) {
          break
        } else if (index1 > index2) {
          return false;
        } else {
          s1 = s1.slice(1);
          s2 = s2.slice(1);
        }
      } else if (s1.length) {
        return false
      } else {
        return true;
      }
    }
  }
  return true
};

别人提供的比较挫的方法,把字典给全翻译出来了

var isAlienSorted = function (words, order) {
  const dict = {};
  for (let i = 0; i < order.length; i++) dict[order[i]] = i;
  words = words.map((word) => {
    return word.split("").reduce((res, w) => {
      return res + String.fromCharCode(97 + dict[w]);
    }, "");
  });
  for (let i = 1; i < words.length; i++) {
    if (words[i] < words[i - 1]) return false;
  }
  return true;
};

image.png