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

代码随想录刷题day24|(字符串篇)151.反转字符串中的单词

一、题目思路

1.快慢指针移除字符串首尾以及单词中的多余空格

类似前面数组篇--移除元素代码随想录刷题day02|(数组篇)27.移除元素、26.删除有序数组中的重复项_代码随想录网站-CSDN博客

快指针fast遍历整个字符串,慢指针slow指向新字符串中的元素,去除时,只看fast的值,不看slow;fast为空(*),slow=空,说明是开头,slow不移动,移动fast 直到fast指向不为空;fast为空,slow≠空,说明到了某个单词末尾,slow=空,这个操作只执行一次,确保实现每个单词之间有一个空格,同时slow+1,如果fast仍未空,说明单词之间有多个空格,移动fast直到不再为空,此时同时移动slow和fast,并将fast指向元素赋值给slow,直到fast为空,回到 * 位置,重新循环判断;最后slow指向新数组的末尾+1 = 长度;

注:回到for循环后,fast先加1,重复加1,会不会有问题?

当fast没有到末尾,但为空时,最后的while循环结束,重新开始for循环,此时fast指向为空,如果fast++,相当于去除掉指向空格,所以不会出错;

2.将字符串整体反转

类似反转字符串:代码随想录刷题day22|(字符串篇)344.反转字符串、541.反转字符串 II-CSDN博客

3.将每个单词反转

同上,只是需要判断是否到单词末尾,即指向为空时,进行反转;

注:1.for(int end = 0;end <= chars.length;end++)

 //这里<= 是为了 让end指向字符串末尾时和 指向单词间空格时 可以有同样的处理操作,否则end = length - 1 是最后一次循环,但是 reverse中第3个参数是end-1,那么end指向的最后一个单词就不会进行反转,就会出错;如果让第3个参数=end,那么指向单词间空格时就不符合要求,因为此时end 指向空格,空格不参与反转,但判断单词间只能通过判断空格,所以只能让end指向末尾元素的后一位,从而保证两者操作逻辑相同,不用单独处理;

2.if(end == chars.length || chars[end] == ' ') 判断条件的顺序

if(end == chars.length || chars[end] == ' ')  ✅

if(chars[end] == ' ' || end == chars.length) ❌

错误原因:

在if(chars[end] == ' ' || end == chars.length) 中:

1.chars[end]的访问可能越界:当end = chars.length时,数组索引范围时0到chars.length -1,访问chars[chars.length] 会导致ArrayIndexOutOfBoundsException;

2.短路求值:逻辑运算符 || 是短路求值,即如果第一个条件是true,则不会计算第二个条件;那么如果将end == chars,length放在前面,当end = chars.length时,为true,程序不会执行chars[end] == ' ',从而避免越界访问。

二、相关算法题目

151.反转字符串中的单词

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

class Solution {public String reverseWords(String s) {char[] chars = s.toCharArray();//1.去除首尾以及单词之间多余空格 快慢指针chars = removeExtraSpaces(chars);//2.反转整个字符串reverse(chars, 0, chars.length - 1);//3.反转单词reverseEachWord(chars);return new String(chars);   }//1.去除首尾以及单词之间多余空格 快慢指针public char[] removeExtraSpaces(char[] chars){int slow = 0;for(int fast = 0;fast < chars.length;fast++){if(chars[fast] != ' '){//此时不为空 说明指向下一个单词开头 但是slow要留出单词空  特殊情况 开头多个空格 slow不赋值 直接while if(slow != 0){chars[slow++] = ' ';}while(fast < chars.length && chars[fast] != ' '){chars[slow++] = chars[fast++];}//长度范围内退出while说明fast=空 到了单词末尾 最后slow指向新数组的末尾+1 = 长度}}char[] newChars = new char[slow];System.arraycopy(chars, 0, newChars, 0, slow);return newChars;}// //2.反转整个字符串public void reverse(char[] chars, int left, int right){if (right >= chars.length) {System.out.println("set a wrong right");return;}while(left < right){char c = chars[left];chars[left] = chars[right];chars[right] = c;left++;right--;}}//3.反转单词public void reverseEachWord(char[] chars){int start = 0;for(int end = 0;end <= chars.length;end++){if (end == chars.length || chars[end] == ' '){//每次到单词间空格 或者字符串末尾 就反转 (字符串末尾没有空格reverse(chars, start, end - 1);start = end + 1;}}}
}

三、总结

1.难点:不会处理单词之间的空格,因为只保留一个,其余去除;

2.java中另外三种解法不是很明白;

3.去除空格的代码思路好难想。。

相关文章:

代码随想录刷题day24|(字符串篇)151.反转字符串中的单词

一、题目思路 1.快慢指针移除字符串首尾以及单词中的多余空格 类似前面数组篇--移除元素代码随想录刷题day02|&#xff08;数组篇&#xff09;27.移除元素、26.删除有序数组中的重复项_代码随想录网站-CSDN博客 快指针fast遍历整个字符串&#xff0c;慢指针slow指向新字符串…...

六、敏捷开发工具:项目管理工具

一、敏捷开发工具 在敏捷开发过程中,项目管理工具是支持团队高效协作、任务跟踪和项目进度控制的关键因素。随着敏捷方法的普及,市场上出现了多种工具来帮助团队进行需求管理、任务分配、进度跟踪以及反馈收集等任务。本文将对常用的敏捷开发项目管理工具(如Jira、Trello、…...

VMware按照的MacOS升级后无法联网

背景 3年前公司使用Flutter开发了一款app&#xff0c;现在app有微小改动需要重新发布到AppStore 问题 问题是原来的Vmware搭建的开发环境发布App失败了 提示&#xff1a;App需要使用xcode15IOS 17 SDK重新构建&#xff0c;这样的话MacOS至少需要升级到13.5 Xcode - 支持 - Ap…...

I2C、SPI、UART

I2C&#xff1a;串口通信&#xff0c;同步&#xff0c;半双工&#xff0c;双线&#xff08;数据线SDA时钟线SCL&#xff09;&#xff0c;最大距离1米到几米 SPI&#xff08;串行外设接口&#xff09;&#xff1a;串口通信&#xff0c;同步&#xff0c;全双工&#xff0c;四线&…...

3.2 Hugging Face Transformers库深度解析:大模型开发的一站式解决方案

Hugging Face Transformers库深度解析:大模型开发的一站式解决方案 一、Transformers库定位:NLP领域的"模型工厂" 1.1 核心定义与技术定位 Hugging Face Transformers 是一个开源的Python库,专为自然语言处理(NLP)、计算机视觉(CV)和语音任务设计。它提供:…...

DeepSeek V3和R1

DeepSeek V3 和 R1 是深度求索&#xff08;DeepSeek&#xff09;推出的两款大模型&#xff0c;基于混合专家架构&#xff08;MoE&#xff09;&#xff0c;但在设计目标、训练方法和应用场景上存在显著差异。以下是两者的详细对比与补充内容&#xff1a; DeepSeek V3和R1 一、模…...

【操作系统】深入理解Linux物理内存

物理内存的组织结构 我们平时所称的内存也叫随机访问存储器也叫 RAM 。RAM 分为两类&#xff1a; 一类是静态 RAM&#xff08; SRAM &#xff09;&#xff0c;这类 SRAM 用于 CPU 高速缓存 L1Cache&#xff0c;L2Cache&#xff0c;L3Cache。其特点是访问速度快&#xff0c;访…...

6.【线性代数】—— 列空间和零空间

六 列空间和零空间 1. 列空间 C(A)2. 零空间 N(A)2.1 定义2.2 为什么零空间是一个子空间&#xff1f;2.3 Axb的解空间&#xff0c;是一个子空间吗&#xff1f; 1. 列空间 C(A) [ c o l 11 c o l 21 c o l 31 c o l 12 c o l 22 c o l 32 c o l 13 c o l 23 c o l 33 ] ⏟ A [ a…...

记一次一波三折的众测SRC经历

视频教程和更多福利在我主页简介或专栏里 &#xff08;不懂都可以来问我 专栏找我哦&#xff09; 目录&#xff1a; 前言 波折一&#xff1a;RCE漏洞利用失败 波折二&#xff1a;SQL时间盲注 波折三&#xff1a;寻找管理后台 总结 前言 先谈个人SRC心得体会吧&#xff0c;我虽…...

Java中的Thread.sleep(0)你了解多少

在Java中&#xff0c;Thread.sleep(long millis)方法用于使当前线程暂停执行指定的时间&#xff08;以毫秒为单位&#xff09;。它通常用于控制线程的执行节奏、避免过度占用CPU资源或实现任务的延迟。然而&#xff0c;Thread.sleep(0)作为Thread.sleep方法的一种特殊用法&…...

POI优化Excel录入

57000单词原始录入时间258S 核心代码: List<Word> wordBookList ExcelUtil.getReader(file.getInputStream()).readAll(Word.class);if (!CollectionUtil.isEmpty(wordBookList)) {for (Word word : wordBookList) {//逐条向数据库中插入单词wordMapper.insert(word);}…...

HarmonyOS进程通信及原理

大家好&#xff0c;我是学徒小z&#xff0c;最近在研究鸿蒙中一些偏底层原理的内容&#xff0c;今天分析进程通信给大家&#xff0c;请用餐&#x1f60a; 文章目录 进程间通信1. 通过公共事件&#xff08;ohos.commonEventManager&#xff09;公共事件的底层原理 2. IPC Kit能…...

DeepSeek核心算法解析:如何打造比肩ChatGPT的国产大模型

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列一DeepSeek核心算法解析&#xff1a;如何…...

【算法】双指针(上)

目录 双指针 左右指针(对撞指针) 快慢指针 移动零 双指针解题 复写零 暴力解题 双指针解题(快慢指针) 快乐数 双指针解题(快慢指针) 盛最多水的容器 暴力解题(会超时) 双指针解题(左右指针) 有效三角形的个数 暴力解题 双指针解题(左右指针) 双指针 常见的双指…...

深度学习模型常用激活函数集合

激活函数是深度学习模型中的关键组成部分&#xff0c;用于引入非线性特性&#xff0c;使神经网络能够学习复杂的模式和映射关系&#xff1b;神经网络本质上是一个复合函数。如果没有激活函数&#xff0c;无论网络有多少层&#xff0c;其输出都只是输入的线性组合。激活函数通过…...

WebAssembly 3.0发布:浏览器端高性能计算迎来新突破!

“WebAssembly 3.0来了&#xff0c;浏览器端的高性能计算将彻底改变&#xff01;”2025年&#xff0c;WebAssembly&#xff08;Wasm&#xff09;迎来了重大更新——WebAssembly 3.0正式发布。这次更新不仅支持多线程和SIMD指令集&#xff0c;还优化了内存管理&#xff0c;让浏览…...

ERP对制造业务有何价值?

ERP 的定义 在定义 ERP 之前&#xff0c;我们先从其首字母缩写说起&#xff0c;ERP 代表企业资源规划。我们可以将 ERP 定义为一种企业软件&#xff0c;它帮助组织管理日常业务。从根本上讲&#xff0c;ERP 将客户管理、人力资源、商业智能、财务管理、库存以及供应链功能整合…...

MySQL5.7 创建用户并授予超管权限脚本

记录MySQL5.7 创建新用户并授予超管权限脚本 用户与密码可任意设置 创建用户并设置密码 CREATE USER zhangsan % identified by 123456oo;修改用户密码 UPDATE USER set authentication_stringpassword("Abc123!") where user"zhangsan ";授予用户超管权…...

芝加哥学派(Chicago School):金融与经济学的创新力量(中英双语)

芝加哥学派&#xff1a;金融与经济学的创新力量 在经济学和金融学的历史上&#xff0c;有一个学派的影响力不容忽视&#xff0c;那就是芝加哥学派&#xff08;Chicago School&#xff09;。芝加哥学派不仅在学术界广受推崇&#xff0c;也深刻影响了全球的经济政策和金融市场。…...

Pytorch实现论文之一种基于扰动卷积层和梯度归一化的生成对抗网络

简介 简介:提出了一种针对鉴别器的梯度惩罚方法和在鉴别器中采用扰动卷积,拟解决锐梯度空间引起的训练不稳定性问题和判别器的记忆问题。 论文题目:A Perturbed Convolutional Layer and Gradient Normalization based Generative Adversarial Network(一种基于扰动卷积层…...

哈希表(C语言版)

文章目录 哈希表原理实现(无自动扩容功能)代码运行结果 分析应用 哈希表 如何统计一段文本中&#xff0c;小写字母出现的次数? 显然&#xff0c;我们可以用数组 int table[26] 来存储每个小写字母出现的次数&#xff0c;而且这样处理&#xff0c;效率奇高。假如我们想知道字…...

3.5 使用Tokenizer编解码文本:从原理到企业级实践

使用Tokenizer编解码文本:从原理到企业级实践 一、Tokenizer核心原理:文本到数字的魔法转换 1.1 分词算法三大流派 # 不同分词算法对比 tokenization_methods = {"WordPiece": "BERT/ELECTRA", "BPE": "GPT/RoBERTa",...

多表关联查询的优化

文章目录 前言1. 数据库设计优化&#xff1a;深入实践**1.1 规范化与反规范化的决策树****1.2 索引设计的实战技巧** **2. SQL 优化&#xff1a;进阶技巧****2.1 JOIN 顺序与执行计划****2.2 分页查询的深度优化** **3. MyBatis Plus 高级用法****3.1 动态 SQL 规避 N1 查询***…...

亚马逊企业购大客户业务拓展经理张越:跨境电商已然成为全球零售电商领域中熠熠生辉的强劲增长点

2024年12月26日-27日&#xff0c;由中国产业海外发展协会上合-海湾双链专委会指导、极新主办的「重度垂直2024极新AIGC峰会」先后在深圳、香港两地顺利开幕。本届峰会以AI的垂直应用与出海为核心主题&#xff0c;旨在深入探讨AI技术在全球范围内的融合应用与发展趋势&#xff0…...

VirtualBox 中使用 桥接网卡 并设置 MAC 地址

在 VirtualBox 中使用 桥接网卡 并设置 MAC 地址&#xff0c;可以按照以下步骤操作&#xff1a; 步骤 1&#xff1a;设置桥接网卡 打开 VirtualBox&#xff0c;选择你的虚拟机&#xff0c;点击 “设置” (Settings)。进入 “网络” (Network) 选项卡。在 “适配器 1” (Adapt…...

idea无法联网,离线安装插件

插件地址&#xff1a;https://plugins.jetbrains.com/ JetBrains Marketplace 如果无法进入&#xff0c;可以试试 配置hosts 3.163.125.103 plugins.jetbrains.com ip 变了&#xff0c;可以查询个最新的&#xff1a; https://tool.chinaz.com/speedtest/plugins.jetbrai…...

网络安全中的机器学习

当涉及到网络安全时&#xff0c;技术一直是保护系统免受攻击和数据泄露的关键。在这篇论文中&#xff0c;我将介绍一些当前在网络安全领域使用的关键技术&#xff0c;包括加密&#xff0c;身份验证和防火墙。 首先&#xff0c;加密是网络安全中最常见的技术之一。加密是指使用算…...

halcon 条形码、二维码识别、opencv识别

一、条形码 函数介绍 create_bar_code_model * 1.创建条码读取器的模板 * 参数一&#xff1a;通用参数的名称&#xff0c;针对条形码模型进行调整。默认值为空 * 参数二&#xff1a;针对条形码模型进行调整 * 参数三&#xff1a;条形码模型的句柄。 create_bar_code_model (…...

springcloud的组件及作用

Spring Cloud是一个用于构建分布式系统的工具集&#xff0c;它提供了一系列组件来简化微服务架构的开发和部署。以下是一些关键的Spring Cloud组件及其作用&#xff1a; 1. 服务注册与发现 Eureka&#xff1a;Eureka是Spring Cloud中的核心组件之一&#xff0c;用于实现服务注…...

Mybatis <if>、<when>标签判断是否等于单个字符串写法

Mybatis 、标签判断是否等于单个字符串写法 问题描述 当在mybatis sql语句中&#xff0c;需要在标签中判断是否等于单个字符串&#xff0c;例如&#xff1a; <choose><when test"timeUnits d">AND T.NO_POWER_SD > TRUNC(SYSDATE) - TO_NUMBER(#{…...