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

双指针题解——反转字符串中的单词【LeetCode】

 151. 反转字符串中的单词

m从后往前跑,是快指针;n在后面追,是慢指

通过双指针来划定每个单词!妙!

  1. 初始化:

    • m 是字符串 s 的最后一个字符的索引(len(s) - 1)。
    • res 是最终的结果字符串,初始为空。
  2. 去除尾部空格:

    • 从字符串的尾部开始,跳过所有的空格字符,直到遇到第一个非空格字符。
    • 这一步是为了避免在结果中引入多余的空格。
  3. 提取单词:

    • 使用双指针 m 和 n 来提取单词。
    • n 初始化为 m,表示当前单词的结束位置。
    • 内层 while 循环:m 从右向左移动,直到遇到空格或字符串的开头。此时,m + 1 到 n 之间的子串就是一个单词。
    • 将单词拼接到 res 中,并加上一个空格。
    • 跳过单词之间的空格,继续处理下一个单词。
  4. 返回结果:

    • 由于每次拼接单词时都会加上一个空格,最终结果会多出一个空格,因此返回 res[:-1],去掉最后一个空格。
class Solution(object):def reverseWords(self, s):""":type s: str:rtype: str"""m = len(s) - 1res = ""# 除去尾部空格while m >= 0 and s[m] == ' ':m -= 1n = m  # n 是另一个指针while m >= 0:while m >= 0 and s[m] != ' ':m -= 1res += s[m + 1:n + 1] + " "  # 获取单词并加上空格while m >= 0 and s[m] == ' ':m -= 1n = mreturn res[:-1]  # 忽略最后一位的空格

假设 s = "the sky is blue",那么算法的执行过程如下:

  1. 初始化:

    • m = 14len(s) - 1),res = ""
  2. 去除尾部空格:

    • s[14] = 'e',不是空格,m 保持不变。
  3. 提取单词:

    • 第一次循环:
      • m 从 14 向左移动,直到遇到空格(m = 10)。
      • 提取单词 s[11:15] = "blue",拼接到 res 中,res = "blue "
      • 跳过空格,m = 9n = 9
    • 第二次循环:
      • m 从 9 向左移动,直到遇到空格(m = 6)。
      • 提取单词 s[7:10] = "is",拼接到 res 中,res = "blue is "
      • 跳过空格,m = 5n = 5
    • 第三次循环:
      • m 从 5 向左移动,直到遇到空格(m = 2)。
      • 提取单词 s[3:6] = "sky",拼接到 res 中,res = "blue is sky "
      • 跳过空格,m = 1n = 1
    • 第四次循环:
      • m 从 1 向左移动,直到遇到字符串开头(m = -1)。
      • 提取单词 s[0:2] = "the",拼接到 res 中,res = "blue is sky the "
      • 跳过空格,m = -1n = -1
  4. 返回结果:

    • 去掉最后一个空格,返回 "blue is sky the"

344. 反转字符串

class Solution(object):def reverseString(self, s):""":type s: List[str]:rtype: None Do not return anything, modify s in-place instead."""left = 0 right = len(s) -1 while left <right:s[left], s[right] = s[right], s[left]left += 1right -= 1return s
http://www.lqws.cn/news/84673.html

相关文章:

  • FastAPI安全认证:从密码到令牌的魔法之旅
  • 嵌入式Linux 期末复习指南(下)
  • Mysql水平分表(基于Mycat)及常用分片规则
  • Spring 5 响应式编程:构建高性能全栈应用的关键
  • hooks组件-useState
  • 吴恩达机器学习笔记(1)—引言
  • 设计模式——访问者设计模式(行为型)
  • wow Warlock shushia [Dreadsteed]
  • 地图 APP 和购物 APP 是最急切上 AI的地方
  • Artificial Analysis2025年Q1人工智能发展六大趋势总结
  • ThreadLocal ,底层原理,强引用,弱引用,内存泄漏
  • Vue3(watch,watchEffect,标签中ref的使用,TS,props,生命周期)
  • FastAPI+Pyomo实现线性回归解决饮食问题
  • 函数调用的机器级实现(二):栈帧的访问与切换机制
  • 极客时间:用 FAISS、LangChain 和 Google Colab 模拟 LLM 的短期与长期记忆
  • 【springcloud】快速搭建一套分布式服务springcloudalibaba(四)
  • python爬虫:Ruia的详细使用(一个基于asyncio和aiohttp的异步爬虫框架)
  • Langchian - 自定义提示词模板 提取结构化的数据
  • 【redis实战篇】第七天
  • 在 Linux 服务器上无需 sudo 权限解压/打包 .7z 的方法(实用命令)
  • 小团队如何落地 Scrum 模型:从 0 到 1 的实战指南
  • rabbitmq Direct交换机简介
  • C++——AVL平衡树
  • Java递归编程中的StackOverflowError问题分析与解决方案
  • 题目 3230: 蓝桥杯2024年第十五届省赛真题-星际旅行
  • 数字孪生智慧水利解决方案:数字化场景、智慧化模拟、精准化决策,构建数字孪生流域为核心的智慧水利体系
  • 【笔记】Windows 部署 Suna 开源项目完整流程记录
  • 前端面试宝典---前端水印
  • Linux中的System V通信标准-共享内存、消息队列以及信号量
  • API 版本控制:使用 ABP vNext 实现版本化 API 系统