网站模板免费下载网站/地推团队去哪里找

网站模板免费下载网站,地推团队去哪里找,有哪些做鸭子网站,金华做网站公司💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:C经典例题 期待您的关注 目录 问题描述 基于快慢指针的解法 基于索引的解法 两种方法的比较 问题描述 在处理字符串相关的问题…

           💓 博客主页:倔强的石头的CSDN主页 

           📝Gitee主页:倔强的石头的gitee主页

            ⏩ 文章专栏:C++经典例题

                                  期待您的关注

 

目录

问题描述

基于快慢指针的解法

基于索引的解法

两种方法的比较


 

问题描述

在处理字符串相关的问题时,反转字符串中每个单词的字符顺序是一个常见的任务,同时要保证空格和单词的初始顺序不变。

 

给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

  • s 包含可打印的 ASCII 字符。
  • s 不包含任何开头或结尾空格。
  • s 里 至少 有一个词。
  • s 中的所有单词都用一个空格隔开。

原题链接:557. 反转字符串中的单词 III - 力扣(LeetCode)

下面我们将详细介绍两种解决该问题的方法,包括其解题思路和具体实现细节。

 


基于快慢指针的解法


1. 解题思路


快慢指针是一种常用的技巧,在本题中,快指针用于遍历字符串,慢指针用于标记每个单词的起始位置。

当快指针遇到空格时,就表示一个单词已经遍历完,此时可以对慢指针到快指针之间的字符进行反转。

遍历完整个字符串后,还需要对最后一个单词进行反转,因为最后一个单词后面没有空格来触发反转操作。同时,这也对只要一个单词的情况进行了处理

 


2. 代码实现

class Solution {
public:string reverseWords(string s) //快慢指针解法{string::iterator fast = s.begin();string::iterator slow = s.begin();while( fast != s.end() )//快指针走完就结束{if(*fast==' ') //快指针走到空格位置停下,反转该部分字母{reverse(slow,fast);slow = fast+1;}++fast;}reverse(slow,fast);//出循环时,慢指针留在最后一个单词的第一个字母//快指针在\0位置,还需要反转一次//同时可以对只要一个单词的string处理return s;}
};


3. 代码细节分析

  • 指针初始化:首先定义了快指针 fast 和慢指针 slow,并将它们都初始化为字符串 s 的起始位置 s.begin()。
  • 遍历字符串:通过 while 循环,只要快指针 fast 没有到达字符串末尾 s.end(),就继续循环。
  • 单词反转:当快指针 fast 指向的字符为空格时,说明一个单词已经遍历完,此时调用 reverse 函数将慢指针 slow 到快指针 fast 之间的字符进行反转。然后将慢指针 slow 移动到下一个单词的起始位置,即 fast + 1。
  • 最后一个单词处理:循环结束后,慢指针 slow 停留在最后一个单词的起始位置,快指针 fast 指向字符串末尾的下一个位置(即 \0 的位置),此时再调用一次 reverse 函数对最后一个单词进行反转。
  • 返回结果:最后返回反转后的字符串 s。

 

基于索引的解法


1. 解题思路

这种方法使用索引来遍历字符串,通过一个变量记录每个单词的起始位置,当遇到空格或者字符串结束时,对当前单词进行反转。


2. 代码实现

#include <iostream>
#include <string>
#include <algorithm>class Solution {
public:string reverseWords(string s) {int start = 0; // 慢指针,标记每个单词的起始位置for (int end = 0; end <= s.length(); ++end) {// 当遇到空格或者字符串结束时,反转当前单词if (end == s.length() || s[end] == ' ') {// 反转从 start 到 end - 1 的字符std::reverse(s.begin() + start, s.begin() + end);// 更新慢指针到下一个单词的起始位置start = end + 1;}}return s;}
};


3. 代码细节分析

  • 起始位置初始化:定义变量 start 来记录每个单词的起始位置,初始化为 0。
  • 遍历字符串:通过 for 循环,使用变量 end 遍历字符串 s,循环条件为 end <= s.length(),这样可以确保在字符串结束时也能处理最后一个单词。
  • 单词反转:当 end 等于字符串的长度 s.length() 或者 s[end] 为空格时,说明一个单词已经遍历完,此时调用 std::reverse 函数将从 s.begin() + start 到 s.begin() + end 的字符进行反转。
  • 更新起始位置:反转完当前单词后,将 start 更新为 end + 1,即下一个单词的起始位置。
  • 返回结果:循环结束后,返回反转后的字符串 s。

 

两种方法的比较

 

  • 时间复杂度:两种方法的时间复杂度都是 O(n),其中 n 是字符串的长度,因为都需要遍历字符串一次,并且每个字符最多被反转一次。
  • 空间复杂度:两种方法的空间复杂度都是 O(1),因为都只使用了常数级的额外空间。
  • 代码可读性:基于索引的方法代码相对更加简洁,使用索引来处理字符串更加直观,而基于快慢指针的方法需要对指针的操作有较好的理解


通过以上两种方法的详细介绍,我们可以根据具体的需求和个人习惯选择合适的方法来解决反转字符串中单词字符顺序的问题。

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/898119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础语法练习45(网络编程)

目录 一、网络的相关概念 1.网络通信 2.网络 3.ip 地址 4.ipv4 地址分类 5.域名 6.网络通信协议 7.TCP 和 UDP 二、InetAddress类 1.相关方法 2.代码示例如下&#xff1a; 三、Socket 1.基本介绍 四、TCP 网络通信编程 1.基本介绍 2.应用示例&#xff1a; 2.1…

【Json—RPC框架】:宏定义不受命名空间限制,续行符的错误使用造成的bug

为什么不受命名空间的限制&#xff1f; 宏处理在预处理阶段&#xff0c; 预处理在编译之前&#xff0c;编译才进行语法分析&#xff0c;语义分析。命名空间也只能限制这部分。 在Json-RPC框架的实现中&#xff0c;遇到如下问题。一开始以为是在实现日志宏的时候&#xff0c;有…

四川省包含哪些水系

背景&#xff1a; 想知道四川省包含哪些水系&#xff0c;以及各个水系的分布&#xff0c;起点、流经省市、终点等 {label: "嘉陵江",value: "嘉陵江",},{label: "渠江",value: "渠江",},{label: "涪江",value: "涪江&q…

子序列问题写法

子序列问题可以按照动态规划的思想去写。 子序列问题类型 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。 例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 写法思路 创建两层for循环…

C++ primer plus 使用类下

目录 前言 一 转换函数 总结 前言 接着上一章的内容 一 转换函数 接着我们上一章节的内容&#xff0c;我们知道我们类里面有一个自动转换利用这个运算符&#xff0c;这样就可以使得对象可以接受这个值 那么有没有可以使一个普通类型去接收一个对象呢&#xff1f; 答案是…

详解布隆过滤器及其模拟实现

目录 布隆过滤器 引入 概念 工作原理 模拟实现布隆过滤器 哈希函数集 布隆过滤器基本框架 add函数&#xff08;添加到布隆过滤器中&#xff09; contains函数&#xff08;判断是否存在该值&#xff09; 完整代码 布隆过滤器的删除 布隆过滤器的误判率 布隆过滤器的…

巧用 VSCode 与 AI 编码提升 Vue 前端开发效率

在当今快节奏的软件开发领域&#xff0c;提升开发效率是每个开发者都追求的目标。对于 Vue 前端开发而言&#xff0c;Visual Studio Code&#xff08;VSCode&#xff09;已经成为了众多开发者的首选编辑器。而随着人工智能技术的发展&#xff0c;各类 AI 编码扩展工具如雨后春笋…

5分钟快速申请一个EDU教育邮箱

感谢CSDN作者 CodeDevMaster 于 2023-10-16 13:22:40 发布作品《5分钟快速申请一个EDU教育邮箱》 本文内容为作者方法的实践与复刻&#xff0c;同时 现在是2025/03/17&#xff0c;执行的细节有部分变动&#xff0c;所以完整展示一波。 祝各位好运&#xff0c;同时本案例中展示…

开源通义万相本地部署方案,文生视频、图生视频、视频生成大模型,支持消费级显卡!

开源通义万相本地部署方案&#xff0c;文生视频、图生视频、视频生成大模型&#xff0c;支持消费级显卡&#xff01; 万相2.1开源 近日&#xff0c;大模型万相2.1&#xff08;Wan&#xff09;重磅开源&#xff0c;此次开源采用Apache2.0协议&#xff0c;14B和1.3B两个参数规格…

qt+opengl 播放yuv视频

一、实现效果 二、pro文件 Qt widgets opengl 三、主要代码 #include "glwidget.h"GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent) {connect(&m_timer, &QTimer::timeout, this,[&](){this->update();});m_timer.start(1000/33); }v…

并发基础—三大问题:可见性、原子性、有序性

文章目录 可见性原子性有序性&#xff08;指令重排&#xff09;经典的指令重排案例&#xff1a;单例模式的双重检查锁volatile和synchronize都可以保证有序性并发压测工具Jcstress证明指令重排会在多线程下出现问题&#xff08;了解&#xff09;CPU缓存分为三个级别&#xff1a…

PyTorch 入门学习

目录 PyTorch 定义 核心作用 应用场景 Pytorch 基本语法 1. 张量的创建 2. 张量的类型转换 3. 张量数值计算 4. 张量运算函数 5. 张量索引操作 6. 张量形状操作 7. 张量拼接操作 8. 自动微分模块 9. 案例-线性回归案例 PyTorch 定义 PyTorch 是一个基于 Python 深…

Spring Cloud 中的服务注册与发现: Eureka详解

1. 背景 1.1 问题描述 我们如果通过 RestTamplate 进行远程调用时&#xff0c;URL 是写死的&#xff0c;例如&#xff1a; String url "http://127.0.0.1:9090/product/" orderInfo.getProductId(); 当机器更换或者新增机器时&#xff0c;这个 URL 就需要相应地变…

网页制作15-Javascipt时间特效の记录网页停留时间

01效果图&#xff1a; 02运用&#xff1a; window.setTimeout&#xff08;&#xff09;刷新function&#xff08;&#xff09;函数document.forms&#xff08;&#xff09;&#xff1a;表单if条件语句window.alert&#xff08;&#xff09;窗口警示 03、操作代码&#xff1a;…

C++ std::list超详细指南:基础实践(手搓list)

目录 一.核心特性 1.双向循环链表结构 2.头文件&#xff1a;#include 3.时间复杂度 4.内存特性 二.构造函数 三.list iterator的使用 1.学习list iterator之前我们要知道iterator的区分 ​编辑 2.begin()end() 3.rbegin()rend() 四.list关键接口 1.empty() 2. size…

996引擎 - 红点系统

996引擎 - 红点系统 总结NPC 红点(TXT红点)Lua 红点1. Red_Point.lua2. UI_Ex.lua参考资料以下内容是在三端 lua 环境下测试的 总结 红点系统分几个部分组成。 M2中设置变量推送。 配置红点表。 Envir\Data\cfg_redpoint.xls 2.1. UI元素中找到ID填写 ids 列。 主界面挂载…

PySide(PyQt),使用types.MethodType动态定义事件

以PySide(PyQt)的图片项为例&#xff0c;比如一个视窗的场景底图是一个QGraphicsPixmapItem&#xff0c;需要修改它的鼠标滚轮事件&#xff0c;以实现鼠标滚轮缩放显示的功能。为了达到这个目的&#xff0c;可以重新定义一个QGraphicsPixmapItem类&#xff0c;并重写它的wheelE…

【eNSP实战】三层交换机使用ACL实现网络安全

拓图 要求&#xff1a; vlan1可以访问Internetvlan2和vlan3不能访问Internet和vlan1vlan2和vlan3之间可以互相访问PC配置如图所示&#xff0c;这里不展示 LSW1接口vlan配置 vlan batch 10 20 30 # interface Vlanif1ip address 192.168.40.2 255.255.255.0 # interface Vla…

Unity中WolrdSpace下的UI展示在上层

一、问题描述 Unity 中 Canvas使用World Space布局的UI&#xff0c;想让它不被3d物体遮挡&#xff0c;始终显示在上层。 二、解决方案 使用shader解决 在 UI 的材质中禁用深度测试&#xff08;ZTest&#xff09;&#xff0c;强制 UI 始终渲染在最上层。 Shader "Custo…

五子棋小游戏-简单开发版

一、需求分析 开发一个基于 Pygame 库的五子棋小游戏&#xff0c;允许两名玩家在棋盘上轮流落子&#xff0c;当有一方达成五子连珠时游戏结束&#xff0c;显示获胜信息&#xff0c;并提供退出游戏和重新开始游戏的操作选项。 1.棋盘显示 &#xff1a; 显示一个 15x15 的五子棋…