[代码随想录09]字符串2的总结

news2025/1/11 5:42:46

前言

处理字符串主要是有思路,同时总结方法。

题目链接

 151. 反转字符串中的单词 - 力扣(LeetCode)

55. 右旋字符串(第八期模拟笔试)

一、翻转字符串里的单词

这个题目的主要思路,代码采用从后往前遍历字符串的方式,逐个提取单词并按反转顺序添加到新的字符串中,同时妥善处理了空格相关的问题,最终得到符合要求的输出字符串。

具体步骤:

  1. 初始化与循环准备:首先获取输入字符串 s 的长度,并将用于遍历字符串的索引 i 初始化为字符串最后一个字符的位置(i = s.size() - 1)。同时创建一个空字符串 ans,用来存储最终处理好的结果。

  2. 外层循环(处理每个单词):通过 while(i >= 0) 这个外层循环来依次处理字符串中的每个单词。从字符串末尾开始向前遍历,这个循环会持续执行,直到整个字符串都被处理完(也就是 i 小于 0 时结束)。

  3. 跳过末尾空格:在每次开始处理一个新的可能的单词前,有一个内层的 while 循环 while(i >= 0 && s[i] == ' ') --i;,它的作用是跳过字符串末尾连续出现的空格。比如字符串最后可能跟着多个空格,要先把这些空格跳过,找到真正最后一个单词的最后一个字符位置。

  4. 确定单词长度:紧接着另一个内层 while 循环 while(i >= 0 && s[i]!= ' ') --i, ++c;,这个循环从刚才跳过空格后的位置开始,继续向前遍历,只要当前字符不是空格(意味着还处于同一个单词内),就继续向前移动索引 i,同时用计数器 c 记录当前单词的字符个数。例如对于单词 "blue",这个循环会统计出它包含 4 个字符。

  5. 提取并添加单词到结果字符串:如果计数器 c 不为 0,说明找到了一个有效的单词,那么通过 s.substr(i + 1, c) 提取出这个单词(substr 函数用于截取从指定位置开始、指定长度的子字符串,这里 i + 1 是因为刚才循环结束时 i 指向单词的前一个位置,所以要加 1 才是单词开始的正确位置,c 就是单词的长度),并把这个单词添加到结果字符串 ans 中,同时在单词后面添加一个空格(ans += s.substr(i + 1, c) + " ";),方便后续区分不同单词。

  6. 去除最后多余的空格:当整个字符串都处理完后,通过 return ans.substr(0, ans.size() - 1); 返回最终结果。由于在添加每个单词时都额外添加了一个空格,最后结果字符串末尾会多一个空格,所以这里通过截取字符串去掉最后这个多余的空格,只返回前面正确处理好的内容,也就是完成了单词反转并且格式整理好的字符串。

string reverseWords(string s) {
        int i=s.size()-1;
        string ans;
        while(i>=0){
            int c=0;
            while(i>=0&&s[i]==' ')--i;
            while(i>=0&&s[i]!=' ')--i,++c;
            if(c)ans+=s.substr(i+1,c)+" ";
        }
         return ans.substr(0,ans.size()-1);
    }

二、右旋转字符串

 思路:先逆序翻转,然后再翻转前N个字符串,再翻转后面的。

//逆序翻转
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
    int n;
    string s;
    cin >> n;
    cin >> s;
    int len = s.size(); //获取长度
    reverse(s.begin(), s.end()); // 整体反转
    reverse(s.begin(), s.begin() + n); // 先反转前一段,长度n
    reverse(s.begin() + n, s.end()); // 再反转后一段
    cout << s << endl;
} 

总结

对于字符串的处理,

遍历方式

正向遍历:按顺序从开头到结尾访问字符,适用于常规顺序处理。

反向遍历:从末尾往开头遍历,便于处理与结尾相关或需逆序操作的情况。

双指针遍历:两指针依规则同步或异步移动,用于对比、处理对应字符,如判断回文。

字符操作

比较:判断字符是否为特定类型,依结果执行不同逻辑。

转换:进行大小写、字符与数值等转换,便于后续处理。

替换与删除:按需对字符替换或删除。

子字符串处理

提取:截取子字符串用于进一步分析。

查找:判断是否包含特定子字符串。

辅助数据结构

:用于顺序反转、暂存符合后进先出特点的内容。

队列:按先进先出顺序处理相关元素。

哈希表:高效统计字符、子字符串出现情况等。

动态规划用于存在最优子结构性质的复杂问题,通过定义状态与状态转移方程求解最优解。

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

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

相关文章

海外的bug-hunters,不一样的403bypass

一种绕过403的新技术&#xff0c;跟大家分享一下。研究HTTP协议已经有一段时间了。发现HTTP协议的1.0版本可以绕过403。于是开始对lyncdiscover.microsoft.com域做FUZZ并且发现了几个403Forbidden的文件。 &#xff08;访问fsip.svc为403&#xff09; 在经过尝试后&#xff0…

【STM32 Modbus编程】-作为主设备读取保持/输入寄存器

作为主设备读取保持/输入寄存器 文章目录 作为主设备读取保持/输入寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、读保持寄存器2.1 主设备发送请求2.2 从设备响应请求2.3 主机接收数据3、读输入寄存器4、结果4.1 保持寄存器4.2 输入寄存器在前面的…

数字图像处理 实验三 数字图像的几何运算

一、实验目的 掌握图像的基本几何变换的方法 1. 图像的平移 2. 图像的旋转 二、实验环境 1. PC计算机 2. MatLab软件/语言包括图像处理工具箱(Image Processing Toolbox) 3. 实验所需要的图片 三、实验原理 提示&#xff1a;图片平移就是实现运算 四、实验图像 图片名称&a…

卷积神经网络比于全连接神经网络强在哪?

卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;与全连接神经网络&#xff08;Fully Connected Neural Networks&#xff0c;简称FFNN&#xff09;是深度学习和神经网络领域中两种最为常见的网络结构。两者在结构、工作原理及应用场景上…

超融合承载 PostgreSQL 数据库和 AI 系统的性能评测|金融行业实践

随着人工智能技术的日渐成熟&#xff0c;不少金融用户也开发了自己的 AI 应用系统&#xff0c;协助实际业务中诸如文字识别、图像转换、信息录入等工作&#xff0c;提升业务效率。不过&#xff0c;AI 应用系统普遍依赖 GPU 提供强大算力&#xff0c;对底层存储的性能也有较高的…

VBA信息获取与处理第四个专题第二节:将工作表数据写入VBA数组

《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。这部教程给大家讲解的内容有&#xff1a;跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互…

汽车IVI中控开发入门及进阶(三十七):基于HFP协议的蓝牙电话

概述: HFP全称Hands-free Profile,是一款让蓝牙设备控制电话的软件,多用于汽车上。此类设备最常见的例子是车载免提装置与蜂窝电话或可穿戴无线耳机一起使用。该配置文件定义了支持免提配置文件的两个设备如何在点对点的基础上相互交互。免提模式的实现通常使耳机或嵌入式免…

声音克隆技术:探索与实践 —— 从GPT-SoVITS V2到未来趋势20241201

声音克隆技术&#xff1a;探索与实践 —— 从GPT-SoVITS V2到未来趋势 引言&#xff1a;AI与声音创作的完美碰撞 &#x1f3a4;✨ 声音克隆技术正以惊人的速度改变语音生成的方式。从文本到语音&#xff0c;从音色到情感&#xff0c;人工智能赋予了声音创作全新的可能性。 在这…

ip地址显示本地局域网什么意思?ip地址冲突怎么解决

在日常使用网络的过程中&#xff0c;我们可能会遇到IP地址显示“本地局域网”的情况&#xff0c;同时&#xff0c;局域网内IP地址冲突也是一个常见且令人头疼的问题。本文将首先解释IP地址显示本地局域网的含义&#xff0c;随后详细探讨局域网IP地址冲突的解决方法&#xff0c;…

MR30分布式IO模块赋能喷水织机

纺织行业作为我国传统支柱产业&#xff0c;历经数千年的演变&#xff0c;如今仍面临着诸多困境&#xff0c;在纺织行业中&#xff0c;每一次技术的飞跃都是对行业边界的勇敢探索。在纺织行业&#xff0c;喷水织机作为关键生产设备&#xff0c;其性能直接影响到产品质量和产能。…

自建服务器,数据安全有保障

在远程桌面工具的选择上&#xff0c;向日葵和TeamViewer功能强大&#xff0c;但都存在收费昂贵、依赖第三方服务器、数据隐私难以完全掌控等问题。相比之下&#xff0c;RustDesk 凭借开源免费、自建服务的特性脱颖而出&#xff01;用户可以在自己的服务器上部署RustDesk服务端&…

html小白初学

语义化更易读&#xff0c;seo&#xff1b;搜索引擎优化 块级元素&#xff1a;独占一行&#xff0c;不管内容长度 内联元素&#xff1a;紧跟着排列 盒模型&#xff1a; 标准盒模型&#xff0c;内容即为长宽&#xff0c;内外边距&#xff0c;框都不算。 怪异盒模型&#xff0…

Python subprocess.run 使用注意事项,避免出现list index out of range

在执行iOS UI 自动化专项测试的时候&#xff0c;在运行第一遍的时候遇到了这样的错误&#xff1a; 2024-12-04 20:22:27 ERROR conftest pytest_runtest_makereport 106 Test test_open_stream.py::TestOpenStream::test_xxx_open_stream[iPhoneX-xxx-1-250] failed with err…

RTCMultiConnection 跨域问题解决

js套件地址 https://github.com/muaz-khan/RTCMultiConnection server套件地址 https://github.com/muaz-khan/RTCMultiConnection-Server 要解决的就是server代码的跨域问题 原装写法&#xff1a; 解决写法&#xff1a; // 喜欢组合语法的自己组 const io new ioServer.S…

即时通信系统项目总览

聊天室服务端项目总体介绍 本项目是一个全栈的即时通信系统, 前端使用QT实现聊天客户端, 后端采⽤微服务框架设计, 由网关子服务统一接收客户端的请求, 再分发到不同的子服务上处理并将结果返回给网关, 网关再将响应转发给客户端 拆分的微服务包含&#xff1a; 网关服务器&…

网络原理之 TCP 协议

目录 1. TCP 协议格式 2. TCP 原理 (1) 确认应答 (2) 超时重传 (3) 连接管理 a) 三次握手 b) 四次挥手 (4) 滑动窗口 (5) 流量控制 (6) 拥塞控制 (7) 延时应答 (8) 捎带应答 3. TCP 特性 4. 异常情况的处理 1) 进程崩溃 2) 主机关机 (正常流程) 3) 主机掉电 (…

从零开始的使用SpringBoot和WebSocket打造实时共享文本应用

在现代应用中&#xff0c;实时协作已经成为了非常重要的功能&#xff0c;尤其是在文档编辑、聊天系统和在线编程等场景中。通过实时共享文档&#xff0c;多个用户可以同时对同一份文档进行编辑&#xff0c;并能看到其他人的编辑内容。这种功能广泛应用于 Google Docs、Notion 等…

「Mac畅玩鸿蒙与硬件43」UI互动应用篇20 - 闪烁按钮效果

本篇将带你实现一个带有闪烁动画的按钮交互效果。通过动态改变按钮颜色&#xff0c;用户可以在视觉上感受到按钮的闪烁效果&#xff0c;提升界面互动体验。 关键词 UI互动应用闪烁动画动态按钮状态管理用户交互 一、功能说明 闪烁按钮效果应用实现了一个动态交互功能&#xf…

SSM报错:表现层方法应该返回字符串,但是返回页面

在进行SSM项目时&#xff0c;后端表现层应该返回给前端字符串&#xff0c;但是却跳转页面 1.首先检查是否使用ResponseBody注解 ResponseBody注解 作用&#xff1a;将java对象转为json格式的数据。将controller的方法返回的对象通过适当的转换器转换为指定的格式之后&#xff0…

重生之我在异世界学编程之C语言:深入结构体篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文《1》 结构体的两种声明一、结构…