发布于 2026-01-06 3 阅读
0

一个经典的面试问题

一个经典的面试问题

大家好!欢迎回到“代码点评”栏目,这是一个每周在 Dev.to 独家发布的编程面试挑战和职业相关内容系列。我是 Elisabeth Gross,您可能通过 Coderbyte.com 认识我,这是一个致力于帮助各个级别的开发者找到下一份工程工作的网站。或者,您可能通过Breadwinnerss听说过我,这是一个帮助用户在数十家公司中申请他们感兴趣的职位介绍的工具。您或许就是 Dev.to 这个充满热情的程序员社区的一员。无论您来自哪里,都欢迎您!如果您喜欢这类内容,请务必在此处注册我们的新闻通讯。好了,闲话少说,让我们开始正文吧!

挑战

给定两个字符串,如果它们互为字母异位词,则返回 true。记住,字母异位词是指通过重新排列另一个字符串的字母而形成的单词、短语或名称,例如,由 iceman 组成的 cinema 就是 cinema。

不太理想的方法

排序功能

这个解决方案利用了sortJavaScript 语言自带的排序函数。许多语言都有排序函数,但了解底层排序的实现方式至关重要,尤其是在考虑算法整体时间复杂度时。V8 引擎 Chrome 浏览器和 Node.js 中运行的 JavaScript 引擎)使用归并排序算法实现数组排序,其时间复杂度为 O( n O(nlog(n))^2)。向面试官展示你理解使用内置方法并非“免费”,它只是别人的代码,这一点非常重要 :)

解决方案

对字符串进行排序后,就可以直接比较它们了!如果相等,则它们是字谜;如果不相等,则返回 false。这在代码中相对简单。

function anagram(str1, str2) {

  // replace all whitespace in string, split into arrays, sort and rejoin as strings
  sorted1 = str1.toLowerCase().replace(/\s+/g, '').split('').sort().join()
  sorted2 = str2.toLowerCase().replace(/\s+/g, '').split('').sort().join()

  return sorted1 === sorted2
}

下周请尝试提出更优的解决方案。祝您编程愉快!

文章来源:https://dev.to/coderbyte/a-classic-interview-question-kn2