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

代码随想录算法训练营第十四天(2)|151.翻转字符串里的单词

文档讲解:代码随想录

难度:easy

附:冲

passion!!!passion!!!passion!!!

 151.翻转字符串里的单词

力扣题目链接(opens new window)

给定一个字符串,逐个翻转字符串中的每个单词。

示例 1:
输入: "the sky is blue"
输出: "blue is sky the"

示例 2:
输入: "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

示例 3:
输入: "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个

思路

  1. 首先将获取的参数赋值给一个数组,再创建c一个用来返回的数组(多出来的一个位置是为了在添加单词时,每个单词后面可以添加一个空格。最终,末尾的空格不会被返回。)、
  2. 创建一个指newArrPos 针,用于跟踪新字符数组 newArr 的当前位置。初始值为 0,表示从 newArr 的第一个位置开始填充。
  3. i来进行整体对源字符数组从后往前遍历
  4. 进入循环:如果是空i--,否则记录当前索引值然后如果不是空i--
  5. 提取单词(用到了right为临界)
  6. 最后如果为空,则返回空,否则通过 String(newArr,0,newArrPos-1)来提取newArr 中有效部分(即反转后的单词序列),并去掉最后一个多余的空格。

补充

String(newArr, 0, newArrPos - 1) 这行代码的作用是从字符数组 newArr 中创建一个新的字符串。它的参数含义如下:

  1. newArr: 这是源字符数组,包含了反转后的单词以及每个单词后面的空格。

  2. 0: 这是起始索引,表示从 newArr 的第 0 个位置开始创建字符串。

  3. newArrPos - 1: 这是结束索引,表示字符串的结束位置是 newArrPos - 1

具体作用

  • 这行代码的目的是从 newArr 中提取有效部分(即反转后的单词序列),并去掉最后一个多余的空格。

  • newArrPos 是 newArr 的当前填充位置,指向最后一个有效字符的下一个位置。

  • 由于每个单词后面都添加了一个空格,newArrPos - 1 会去掉最后一个单词后面的空格。

代码

class Solution {public String reverseWords(String s) {//源字符数组char[] initialArr = s.toCharArray();//新字符数组char[] newArr = new char[initialArr.length+1];//下面循环添加"单词 ",最终末尾的空格不会返回int newArrPos = 0;//i来进行整体对源字符数组从后往前遍历int i = initialArr.length-1;while(i>=0){while(i>=0 && initialArr[i] == ' '){i--;}  //跳过空格//此时i位置是边界或!=空格,先记录当前索引,之后的while用来确定单词的首字母的位置int right = i;while(i>=0 && initialArr[i] != ' '){i--;} //指定区间单词取出(由于i为首字母的前一位,所以这里+1,),取出的每组末尾都带有一个空格for (int j = i+1; j <= right; j++) {newArr[newArrPos++] = initialArr[j];if(j == right){newArr[newArrPos++] = ' ';//空格}}}//若是原始字符串没有单词,直接返回空字符串;若是有单词,返回0-末尾空格索引前范围的字符数组(转成String返回)if(newArrPos == 0){return "";}else{return new String(newArr,0,newArrPos-1);}}
}


http://www.mrgr.cn/news/95429.html

相关文章:

  • WSL 导入完整系统包教程
  • 使用brower use AI 代理自动控制浏览器完成任务
  • 【Java篇】静动交融,内外有别:从静态方法到内部类的深度解析
  • 网络HTTPS协议
  • SOFABoot-09-模块隔离
  • 2025知识图谱峰会(脱敏)PPT合集(18份).zip
  • LintCode第1712题 - 和相同的二元子数组
  • 3月22日星期六今日早报简报微语报早读
  • 回调方法传参汇总
  • 一文详解响应式编程springwebflux
  • C++函数与STL
  • c#知识点补充4
  • SSH密钥认证 + 文件系统权限控制 + Git仓库配置+封存与解封GIT仓库
  • 【Git流程最佳实践】 开发较大功能时应使用project branch
  • 基于CNN的FashionMNIST数据集识别5——GoogleNet模型
  • Linux_进程概念(B)-环境变量进程地址空间【Linux】
  • QT二 QT使用generate form 生成常用UI,各种UI控件
  • Python 基础知识整理笔记
  • 基于deepseek的智能语音客服【第二讲】后端异步接口调用封装
  • 【大模型算法工程】大模型应用工具化、忠诚度以及知识库场景下PDF双栏解析问题的讨论