JavaScript 算法挑战 | 第一部分 为什么要读这篇文章? 先决条件 挑战 1 — 反转字符串 挑战 2 — 回文 最后总结 目标 Martin Nordström

2025-06-09

JavaScript 算法挑战 | 第一部分

为什么还要费心去读这个呢?

先决条件

挑战 1 — 反转字符串

挑战 2——回文

最后的评论

目标

马丁·诺德斯特伦

这是我将要写的关于 Javascript 编码挑战以及如何解决它们(以某种方式)的系列文章的开始。

图像的替代文本

为什么还要费心去读这个呢?

如果你计划成为一名优秀的程序员,我敢打赌,你们中的一些人已经计划好将来找工作了。而找工作需要经历一个过程,其中包括面试,甚至可能还有编程挑战。有些测试可能在公司的白板上进行,也可能在你家里的电脑上进行。公司通常会进行这类测试,因为:

  • 这表明你了解你的编程逻辑
  • 这表明你具有批判性思维能力
  • 它展示了如何在压力下工作
  • 它只是向公司展示了你的编码方式的总体情况

因此,了解并提高编写算法的能力是很好的,因为这可能是公司希望你编写的算法。

因此,我决定开始一个系列“Javascript 算法挑战”,在其中我将提出不同的挑战并展示如何解决它们(以某种方式),以便您更好地理解编写算法并理解它们。

先决条件

我将使用 Node.js 来运行 Javascript 代码,因此您应该在继续之前安装它。

我为本文创建了一个 Gist,以便您可以快速入门!具体如下:

/*
Author: Martin Nordström
Created: 2018/03/09 
Keep coding!
*/

// REVERSE A STRING CHALLENGE
// Return string in reverse
function reverseString(str) {}

// PALINDROME CHALLENGE
// Return true if palindrome and false if not
function isPalindrome(str) {}
Enter fullscreen mode Exit fullscreen mode

当你安装了 Node.js 并下载了 Gist 后,你就可以开始了!:-)

挑战 1 — 反转字符串

由于这个挑战非常简单,我将提供几种解决方法,以便您了解有很多不同的方法可以实现相同的结果。我们将从以下方面开始:

function reverseString(str) {}

我们要做的第一件事是创建一个新变量,并将其设置为传入的字符串split()。由于它将split()字符串转换为数组,并接受分隔符作为参数。由于我们希望每个字符都放入其自己的数组值中,因此我们将参数设置为''。它看起来像这样:

function reverseString(str) {
  const strArray = str.split('');
}
Enter fullscreen mode Exit fullscreen mode

然后我们可以使用数组原型方法 reverse() 来反转数组(很聪明吧?)。所以,让我们覆盖当前值。

function reverseString(str) {
const strArray = str.split('');
strArray.reverse();
}

为了测试这一点,我们可以调用该函数并传入一个字符串,看看会返回什么结果。别忘了在console.log()函数末尾加上 。

function reverseString(str) {
  const strArray = str.split('');
  strArray.reverse();
  console.log(strArray);
}
reverseString('Hello Medium');
// Output:
[ 'm', 'u', 'i', 'd', 'e', 'M', ' ', 'o', 'l', 'l', 'e', 'H' ]
Enter fullscreen mode Exit fullscreen mode

现在我们得到了逆序数组,可以将其恢复为常规字符串。我们可以使用join()which 函数来实现这一点。该函数将数组元素连接成一个字符串并返回。我们也可以像之前使用 一样指定分隔符split()。现在,让我们返回应用该方法的新字符串join()。代码如下所示:

function reverseString(str) {
  const strArray = str.split('');
  strArray.reverse();
  return strArray.join('');
}
reverseString('hello');
// Output: muideM olleH
Enter fullscreen mode Exit fullscreen mode

这段代码运行正常,但确实有点乱。说实话,我们根本不需要 strArray 这个变量!我们可以把这些方法串联起来,就像这样:

function reverseString(str) {
  return str.split('').reverse().join('');
}
reverseString('Hello Medium');
// Output: muideM olleH
Enter fullscreen mode Exit fullscreen mode

除了这些方法,我们也可以使用经典的 FOR 循环!在本例中,我们将使用递减FOR 循环。

我们应该做的第一件事是创建一个包含空字符串的新变量,该变量将承载新创建的字符串。

function reverseString(str) {
  let revString = "";  
}
Enter fullscreen mode Exit fullscreen mode

第二步是创建实际的 for 循环。我们将使用 str 的长度,但像这样:str.length — 1因为它将对应于字符串中的最后一个字母。在我们的例子中,是“m”。只要i大于或等于 0,我们就会循环,并在每次迭代后减少 i。然后将newString变量添加到它自身和数组 的索引值中str。我们还必须返回revString

function reverseString(str) {
  let revString = "";

  for (let i = str.length - 1; i >= 0; i--) {
    revString += str[i];
  }

  return revString;

}
reverseString('Hello Medium');
// Output: muideM olleH
Enter fullscreen mode Exit fullscreen mode

恭喜!现在你知道了两种在 JavaScript 中反转字符串的方法!

图像的替代文本

挑战 2——回文

首先,回文是指无论正着读还是反着读,内容都相同的单词或短语。例如:

  • 安娜
  • 大号
  • 难道我们不纯洁吗?“不,先生!”巴拿马喜怒无常的诺列加自夸道。“这是垃圾!”讽刺注定一个人的命运;一个囚犯走向新时代

所以我们要做的就是,如果单词或短语是回文,则返回 true;如果不是回文,则返回 false。很简单!

这是我们的起始代码块:

function isPalindrome(str) {}

我们首先要做的是反转字符串,并将其值赋给一个变量。既然我们已经知道怎么做了,这个步骤就超级简单!我会选择第一个方案,因为它是最实用的(在我看来)。

function isPalidrom(str) {
  const revString = str.split('').reverse().join('');
}
Enter fullscreen mode Exit fullscreen mode

由于回文正向和反向都是相同的,因此我们只需检查两个不同的字符串是否相等!

function isPalidrom(str) {
  const revString = str.split('').reverse().join('');

  return revString === str;
}
Enter fullscreen mode Exit fullscreen mode

我们还可以稍微整理一下代码,当然调用函数并传入一个字符串。

function isPalidrom(str) {
  return str === str.split('').reverse().join('');
}
isPalidrom('Hello Medium');
// Output: false
Enter fullscreen mode Exit fullscreen mode

正如你所见,false由于“Hello Medium”不是回文,所以它会返回!但是难道我们不纯洁吗?“不,先生!”巴拿马喜怒无常的诺列加吹嘘道。“这是垃圾!”讽刺注定一个人的命运;而囚徒注定要进入新时代

function isPalidrom(str) {
  return str === str.split('').reverse().join('');
}
isPalidrom('Are we not pure? “No sir!” Panama’s moody Noriega brags. “It is garbage!” Irony dooms a man; a prisoner up to new era');
// Output: true
Enter fullscreen mode Exit fullscreen mode

一个小提示!如果我们输入“in”,rAceCar它会返回 false,因为我们输入的是大写字母C? and a capitalA`。不过别担心,修复方法超级简单!


function isPalidrom(str) {
str = str.toLowerCase();
return str === str.split('').reverse().join('');
}
isPalidrom('Are we not pure? “No sir!” Panama’s moody Noriega brags. “It is garbage!” Irony dooms a man; a prisoner up to new era');
// Output: true

这里我们只是将字符串变为小写,然后对它们进行比较。

再次恭喜!现在你也知道如何用 JavaScript 检查回文了!

图像的替代文本

最后的评论

希望这篇文章对你有所帮助。这是我的“JavaScript 算法挑战”系列的第一部分。我会努力寻找更多有趣且有启发性的挑战。请在这里或我的其他社交媒体平台上关注我,获取即将发布的文章的最新消息!

目标

今年我有很多目标。最重要的一个是成为一名更优秀的开发者,同时在 Medium 上获得 100 位粉丝,并在这里发布更多内容,帮助其他人学习新知识。知识就是力量!

马丁·诺德斯特伦

Instagram | Twitter | Github

本文最初发布于 Medium。如需查看,请点击此链接:原文

鏂囩珷鏉ユ簮锛�https://dev.to/martinnrdstrm/javascript-algorithms-challenges--part-1--hc7
PREV
玩转 Kubernetes - 第一章 GenAI LIVE! | 2025 年 6 月 4 日
NEXT
让 Python 程序运行速度飞快