当前位置: 首页 > 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);
        }
    }
}

相关文章:

  • Python Cookbook-4.9 从字典中取值
  • 探索 Ollama:开源大语言模型平台的无限可能​
  • 《大话数据结构》学习记录----第三章线性表
  • SPI 机制与 Spring Boot AutoConfiguration 对比解析
  • 基于linux平台的C语言入门教程(7)类型转换
  • 计算机网络高频(二)TCP/IP基础
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(六)
  • MQTT的安装和使用
  • Leetcode—15. 三数之和(哈希表—基础算法)
  • 【JAVA进阶篇教学】第十一篇:Java中ReentrantLock锁讲解
  • 基于Spring Boot的停车场管理系统的设计与实现(LW+源码+讲解)
  • 在 macOS 上配置 SSH 连接 GitHub
  • 希尔排序
  • C++脚本化方案调研
  • Axure PR 9.0(发音:Ack-sure)原型图工具入门教程:链接交互
  • 股指期货贴水波动,影响哪些投资策略?
  • 制作Oracle11g Docker 镜像
  • 协程的调度的对称与非对称
  • DeepSeek政务应用场景与解决方案【清华大学最新版】
  • 菜鸟之路Day25一一前端工程化(二)
  • 建筑瞭望|融入自然的新泳池,治愈了中央公园的历史旧伤
  • 1101名优秀运动员拟保送,全红婵、黄雨婷、盛李豪在列
  • 外卖大战之外,缝隙中的校园到寝外卖和那些送餐的大学生们
  • 在海拔3980米驻守:“全国先进工作者”刘鹏与洛戈梁子警务站的9年
  • 印度扩大对巴措施:封锁巴基斯坦名人账号、热门影像平台
  • 美国鞋类巨头请求白宫豁免关税,称已构成“生存威胁”