当前位置: 首页 > article >正文

小哆啦解题记:寻找最后一个单词的“长度”

小哆啦解题记:寻找最后一个单词的“长度”

小哆啦开始力扣每日一题的第十五天

https://leetcode.cn/problems/length-of-last-word/description/

第一章:小智的挑战

一天,哆啦A梦和静香、胖虎、小夫在草地上玩飞盘。正当大家玩的不亦乐乎时,突然,小智拿着他的平板走了过来,显得有些神秘。他说:“哆啦A梦,我有一个挑战给你,你能解决它吗?”

哆啦A梦看了一眼小智的平板,发现上面写着一个编程题目:

“给定一个字符串,其中由若干单词和空格组成,请你返回字符串中最后一个单词的长度。”

“嗯?这个不就是很简单的字符串操作吗?”哆啦A梦满脸自信。

小智微笑着摇了摇头:“其实不一定!你能想到更高效的解决方法吗?”

哆啦A梦皱了皱眉:“那就来试试看!”


第二章:最初的解决方案

哆啦A梦开始动手了,他想了想,说:“既然是要找到最后一个单词的长度,那么我们可以先把字符串拆分成单词,然后取最后一个单词的长度。”

他立刻写下了这段代码:

function lengthOfLastWord(s: string): number {
  const words = s.trim().split(' '); // 拆分字符串并去掉两边的空格
  return words[words.length - 1].length; // 返回最后一个单词的长度
}

“这样应该没问题吧?”哆啦A梦自信地展示着他的代码。

小智点了点头,但眼神中带着一丝怀疑:“这个方法虽然看起来没问题,但你有没有考虑到它的效率?”

哆啦A梦疑惑地问:“效率?我觉得挺快的呀,为什么会有问题?”

小智微笑着解释:“当你调用 split() 方法时,整个字符串都会被拆分成数组。如果字符串特别长,这样会占用大量内存,并且还需要额外的时间来创建数组。是不是可以优化一下呢?”

哆啦A梦心里有些慌了:“那怎么做才行呢?”


第三章:小智的高效优化方案

小智微笑着说道:“我们可以用一种反向遍历的方式,从字符串的末尾开始,遇到字母就计数,直到遇到空格为止。这样不仅节省了内存,还能避免不必要的字符串拆分。”

哆啦A梦一愣:“反向遍历?那不是更复杂了吗?”

小智耐心地说:“其实并不复杂。你只需要做一个小小的优化,就能提高效率。我们试试吧!”

于是,小智给哆啦A梦讲解了这个反向遍历的思路。


第四章:反向遍历的神奇魅力

在小智的指导下,哆啦A梦重新开始了编程。这一次,他决定从字符串的末尾开始遍历。只要遇到字母,就继续计数;一旦遇到空格,就停止。

哆啦A梦快速写下了新的代码:

function lengthOfLastWord(s: string): number {
  s = s.trim(); // 去除两端的空格
  let length = 0;
  
  // 从字符串的末尾开始反向遍历
  for (let i = s.length - 1; i >= 0; i--) {
    if (s[i] === ' ') {
      break; // 如果遇到空格,退出循环
    }
    length++; // 如果是字母,长度加1
  }

  return length;
}

“这样不就能从后往前遍历吗?”哆啦A梦问。

“对!”小智点头称赞,“这个方法只会在遇到字母时增加计数,一旦遇到空格,直接停止,节省了大量的时间和空间。”


第五章:测试与验证

哆啦A梦迫不及待地进行测试。他输入了几个不同的字符串来验证这个方法:

  1. 测试普通字符串
console.log(lengthOfLastWord("Hello World")); // 5

输出是 5,因为 "World" 的长度就是 5。

  1. 测试带有空格的字符串
console.log(lengthOfLastWord("   fly me   to   the moon  ")); // 4

输出是 4,最后一个单词是 "moon",长度为 4。

  1. 测试只有一个单词的字符串
console.log(lengthOfLastWord("a")); // 1

输出是 1,因为单词 "a" 的长度是 1。

  1. 测试空字符串
console.log(lengthOfLastWord("   ")); // 0

输出是 0,因为字符串中没有单词。


第六章:总结与小智的智慧

经过这一番调试,哆啦A梦终于明白了小智的高效做法。他感谢地看着小智:“谢谢你,小智!我之前真没想到可以反向遍历字符串。”

小智笑着说:“其实,编程就是要不断思考优化的方式。你看到的解决方法有很多种,但能想到最优解,才是高手。”

哆啦A梦深受启发:“我一定要记住,每个问题背后都有更高效的解法。”


第七章:最终的优化代码

经过小智的指导,哆啦A梦的最终解决方案是这样:

function lengthOfLastWord(s: string): number {
  s = s.trim(); // 去除两端空格
  let length = 0;

  // 从字符串末尾开始反向遍历
  for (let i = s.length - 1; i >= 0; i--) {
    if (s[i] === ' ') {
      break; // 遇到空格停止
    }
    length++; // 继续计数字母的长度
  }

  return length;
}

小智和哆啦A梦一起对着代码点头称赞。这个方法不仅代码简洁,而且在效率上也做了很好的优化。


小智的总结

小智站在哆啦A梦面前,微笑着总结道:“这次的解题过程让我想起了一个重要的编程原则:优化不仅仅是为了让代码看起来更简洁,更多的是在解决问题的过程中,让代码运行得更高效。”

哆啦A梦认真点头:“我明白了,编程不仅要解决问题,还要做到最优!”


结语

经过小智的帮助,哆啦A梦不仅解决了这个问题,而且学到了如何优化程序,使得解决方案既高效又简洁。通过反向遍历字符串,哆啦A梦明白了,在编程中,优化是解题的关键


http://www.kler.cn/a/518704.html

相关文章:

  • 计算机毕设【开题报告】怎么写?
  • 03-机器学习-数据获取
  • 洛谷P1017 [NOIP2000 提高组] 进制转换
  • 讯飞绘镜(ai生成视频)技术浅析(二):大模型
  • Redis 的热 Key(Hot Key)问题及解决方法
  • 区块链共识机制详解
  • 数据结构与算法分析:专题内容——人工智能中的寻路6之NegMax(代码详解)
  • 链式存储结构
  • 详解生成对抗网络(GAN)模型
  • Oracle迁移DM数据库
  • Facebook 元宇宙与全球文化交流的新趋势
  • 1.CSS的三大特性
  • 【Address Overfitting】解决过拟合的三种方法
  • 刷题总结 回溯算法
  • python3+TensorFlow 2.x(二) 回归模型
  • 理解神经网络:Brain.js 背后的核心思想
  • TMC2224替换DRV8824
  • win32汇编环境,函数的编写与调用、传值或返回值等
  • PyQt4 的图片切割编辑器
  • RocketMQ优势剖析-集成云原生环境
  • 【知识】可视化理解git中的cherry-pick、merge、rebase
  • Python爬虫基础总结笔记
  • wangEditor富文本编辑器,Laravel上传图片配置和使用
  • Kimi 1.5解读:国产AI大模型的创新突破与多模态推理能力(内含论文地址)
  • 在 Vue 项目中快速引入和使用 ECharts
  • Golang 中除了加锁还有哪些安全读写共享变量的方式?