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

【leetcode 24】151.翻转字符串里的单词==❗没看懂❗==

在这里插入图片描述

思路:
一些同学会使用split库函数,分隔单词,然后定义一个新的string字符串,最后再把单词倒序相加,那么这道题题目就是一道水题了,失去了它的意义。
所以这里我还是提高一下本题的难度:不要使用辅助空间,空间复杂度要求为O(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.kler.cn/a/513788.html

相关文章:

  • 【Vim Masterclass 笔记24】S10L43 + L44:同步练习10 —— 基于 Vim 缓冲区的各类基础操作练习(含点评课)
  • Mysql基于gtid的主从同步配置实验
  • 优雅解决webview_flutter不支持安卓选择图片视频文件问题
  • 电梯系统的UML文档08
  • 微服务学习-Sentinel 限流保护服务
  • LLaMA Factory框架微调GLM-4大模型
  • Java线程池ThreadPoolExecutor封装工具类
  • 两份PDF文档,如何比对差异,快速定位不同之处?
  • npm install安装缓慢或卡住不动
  • 【整体介绍】
  • 有了TiDB,是否还需要“散装”大数据组件?
  • 利用开源AI智能名片2+1链动模式S2B2C商城小程序满足用户的自恋心理
  • 亚博microros小车-原生ubuntu支持系列:5-姿态检测
  • Linux——信号量和(环形队列消费者模型)
  • [春秋杯冬季赛2025] pwn复现
  • 基于微信小程序的健身房预约管理系统
  • MySQL面试题2025 每日20道【其四】
  • 【0x04】HCI_Connection_Request事件详解
  • C++ 类- 构造和析构
  • 专业辅助软件,独家开发版本,请珍惜使用