【字符串】【双指针翻转字符串+快慢指针】Leetcode 151 反转字符串中单词【好】

news2024/11/28 2:48:37

【字符串】【双指针翻转字符串+快慢指针】Leetcode 151 反转字符串中单词

    • 解法1 双指针翻转字符串+快慢指针+更新数组大小

---------------🎈🎈题目链接🎈🎈-------------------
---------------🎈🎈解答链接🎈🎈-------------------

在这里插入图片描述

解法1 双指针翻转字符串+快慢指针+更新数组大小

1.翻转全部
2.删除空格(快慢指针) 这部分蛮难思考的

  • 当slow不是0(为了排除最前面的一个(一堆)空格)时
    且ch[fast]不是空格,ch[fast-1]是空格的时候————表示一个单词结束,另一个单词开始,此时给slow加空格再进行赋值
  • ch[fast]不是空格——不断遍历单词的时候,只需要把fast的值赋给slow即可
  • 剩下的就是ch[fast]是空格的时候,那就不操作直接fast++

3.翻转单词

更新数组:char[] newch = Arrays.copyOf(ch, 4);

时间复杂度O(N)

  • 翻转全部字符的操作需要遍历整个字符串,时间复杂度为O(n),其中n是字符串的长度。
  • 删除空格的操作也需要遍历整个字符串,时间复杂度为O(n)。
  • 翻转单词的操作需要遍历整个字符串,时间复杂度为O(n)。

空间复杂度O(N)

  • 使用了一个字符数组ch来存储字符串的字符,空间复杂度为O(n),其中n是字符串的长度。
  • 使用了一个新的字符数组newch来存储删除空格后的字符,空间复杂度为O(n)。
  • 没有使用额外的空间,所以除了字符数组外,空间复杂度为O(1)。
class Solution {
    public String reverseWords(String s) {
class Solution {
    public String reverseWords(String s) {
        // 1.翻转全部
        // 2.删除空格
        // 3.翻转单词
        char[] ch = s.toCharArray();

        // 1.翻转全部
        int left = 0;
        int right = ch.length-1;
        while(left < right){
            ch[left] ^= ch[right];
            ch[right] ^= ch[left];
            ch[left] ^= ch[right];
            left++;
            right--;
        }

        // 2.删除空格(快慢指针) 更新数组
        // 慢指针不为0,快指针指向空格 直至遇到下一个字母后 ch[slow++] =' '

        int slow = 0;
        int fast = 0;
        for(; fast < ch.length; fast++){

            // 当slow不是0(为了排除最前面的一个(一堆)空格)时,
            // 且ch[fast]不是空格,ch[fast-1]是空格的时候————表示一个单词结束,另一个单词开始,此时给slow加空格再进行赋值
            if(slow != 0 && ch[fast] != ' ' && ch[fast-1] == ' '){ 
                ch[slow++] = ' ';
                ch[slow++] = ch[fast];
            } 
            // ch[fast]不是空格——不断遍历单词的时候,只需要把fast的值赋给slow即可
            else if(ch[fast] != ' '){
                ch[slow++] = ch[fast];
            }

            // 剩下的就是ch[fast]是空格的时候,那就不操作直接fast++
        }

        char[] newch = Arrays.copyOf(ch, slow); // 更新数组


        // 3.翻转单词
        int left2 = 0;
        for(int i = 0; i <= newch.length; i++){
            if(i == newch.length || newch[i] == ' ' ){
                int right2 = i-1;
                while(left2 < right2){
                    newch[left2] ^= newch[right2];
                    newch[right2] ^= newch[left2];
                    newch[left2] ^= newch[right2];
                    left2++;
                    right2--;
                }
                left2 = i+1;
            }
        }
        return new String(newch);
    }
}   

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

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

相关文章

矩阵起源荣获第八届“创客中国”深圳市中小企业创新创业大赛三等奖

近日&#xff0c;2023年第八届“创客中国”深圳市中小企业创新创业大赛圆满落下帷幕&#xff0c;矩阵起源&#xff08;深圳&#xff09;信息科技有限公司凭借项目”MatrixOne 新一代超融合异构云原生数据库”荣获企业组三等奖。 本届大赛由深圳市工业和信息化局、深圳市中小企业…

Blazor之Router入门

前言&#xff1a;博主文章仅用于学习、研究和交流目的&#xff0c;不足和错误之处在所难免&#xff0c;希望大家能够批评指出&#xff0c;博主核实后马上更改。 概述&#xff1a; Router 组件允许路由到 Razor 组件。 Router 组件在 App 组件 (App.razor) 中使用。编译带有 p…

鲁大师电动车智能化测评报告第二十三期:实测续航95km,九号Q90兼顾个性与实用

鲁大师第二十三期智能化电动车测评排行榜数据来源于鲁大师智慧实验室,测评的车型均为市面上主流品牌的主流车型。截止目前,鲁大师智能化电动车测评的车型高达130余台,且还在不断增加和丰富中。 一、测评依据 鲁大师电动车智能化测评体系包含车辆的状态采集与管理硬件系统、车辆…

【MySQL】手把手教你centos7下载MySQL

centos7下载MySQL 前言正式开始卸载不需要的环境&#xff08;如果你之前没有安装过数据库相关的东西可以跳过&#xff09;下载mysql登录mysql登陆⽅法⼀【不⾏就下⼀个】登陆⽅法⼆【不⾏就下⼀个】登录方式三 前言 安装和卸载MySQL都用系统的root权限&#xff0c;更方便一点&…

pyqt5学习-01 UI界面创建以及生成python代码

前提 环境搭建 打开designer 选择创建主窗体&#xff0c;拖入一个按钮 保存主窗体UI文件为firstMainWin.ui 将UI文件转化为python文件 # 可以把E:\Python\envs\pyqt5stu\Scripts\pyuic5.exe添加到环境变量中 E:\Python\envs\pyqt5stu\Scripts\pyuic5.exe -o firstMainWin.…

新零售时代,传统便利店如何转型?

在零售批发业&#xff0c;如何降低各环节成本、提高业务运转效率、更科学地了解客户服务客户&#xff0c;是每家企业在激烈竞争中需要思考的课题。 对零售批发企业来说&#xff0c;这些问题或许由来已久&#xff1a; &#xff08;1&#xff09;如何对各岗位的员工进行科学的考…

【nginx】使用arthas协助定位 nginx 499

看到这个499 到服务端 通过arthas查看 并没有耗时很长的 心跳接口 看都是很快的 通过 monitor 命令 通过watch 定位看到这个现象&#xff1a; watch -x 3 在nginx配置文件中添加 在nginx 中查看 没有499 了 再看nginx 中有存在 401 这个是业务问题 剩下的是检测器同事定位…

Flink之SQL查询操作

SQL查询 基本SELECT查询生成测试数据WITHWHEREDISTINCTORDER BYLIMIT 窗口函数概述创建数据表滚动窗口 TUMBLE滑动窗口 HOP累积窗口 CUMULATE窗口偏移 聚合窗口聚合分组聚合OVER聚合 TOP-N普通Top-N窗口Top-N 联结Join查询内部等连接外部等连接间隔联结 集合操作UNION 和 UNION…

内存对齐规则

前言 求结构体的大小是很热门的考点&#xff0c;无论你是学C还是C&#xff0c;都会遇到这样的问题&#xff0c;在面试中也很受欢迎&#xff0c;所以我们先思考这样一个问题&#xff1a;计算结构体&#xff0c;联合体和类的大小应该怎么去计算呢&#xff1f;我们知道&#xff0c…

105.am40刷机(linux)折腾记1-前期的准备工作1

前段时间在某鱼上逛的时候&#xff0c;发现一款3399的盒子只要150大洋&#xff0c;内心就开始澎拜&#xff0c;一激动就下手了3台&#xff0c;花了450大洋&#xff08;现在想想&#xff0c;心都碎了一地&#xff09;。 然后自己又来来回回折腾了几天&#xff0c;目前能跑上fire…

C# 异步日志记录类,方便下次使用,不用重复造轮子

先定义接口类&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 异常 {internal interface ILog{Task WriteErrorLog(string message);Task WriteInfoLog(string message);Task W…

高级运维学习(十四)Zabbix监控(一)

一 监控概述 1 监控的目的 &#xff08;1&#xff09;报告系统运行状况 每一部分必须同时监控内容包括吞吐量、反应时间、使用率等 &#xff08;2&#xff09;提前发现问题 进行服务器性能调整前&#xff0c;知道调整什么找出系统的瓶颈在什么地方 2 监控的资源类别 …

钉钉API与集简云无代码开发连接:电商平台与营销系统的自动化集成

连接科技与能源&#xff1a;钉钉API与集简云的一次集成尝试 在数字化时代&#xff0c;许多公司面临着如何将传统的工作方式转变为更智能、高效的挑战。某能源科技有限公司也不例外&#xff0c;他们是一家专注于能源科技领域的公司&#xff0c;产品包括节能灯具、光伏逆变器、电…

Flink之SQL客户端与DDL操作

SQL客户端与DDL操作 Flink SQLSQL客户端1.启动Flink2.启动Flink的SQL客户端3.HELP命令4.验证连接5.结果显示模式6.执行配置 数据库操作1.创建数据库2.查询数据库3.修改数据库4.删除数据库 表操作1.创建表表列属性表Watermark属性列PRIMARY KEY属性列PARTITIONED BY属性列WITH选…

真是性价比之王,腾讯云这款88元云服务器已经圈粉无数!

你是否曾经想过拥有一台属于自己的云服务器&#xff0c;但是却被高昂的价格和复杂的配置吓到了&#xff1f;现在&#xff0c;腾讯云推出了一款价格亲民、简单易用的88元云服务器&#xff0c;让你的梦想成为现实。腾讯云88元/年云服务器配置见下图&#xff1a; 腾讯云88元服务器…

大厂面试题-行锁、临键锁、间隙锁的理解

行锁、临键锁、间隙锁&#xff0c;都是MySQL里面InnoDB引擎下解决事务隔离性的一系列排他锁。 分别介绍一下这三种锁&#xff1a; 1、行锁&#xff0c;也称为记录锁。(如图) 当我们针对主键或者唯一索引加锁的时候&#xff0c;MySQL默认会对查询的这一行数据加行锁&#xff…

视频剪辑方法:为视频剪辑添加亮点,如何制作精美的滚动字幕

在视频剪辑中&#xff0c;滚动字幕是一个重要的元素&#xff0c;它可以为视频增添视觉吸引力&#xff0c;增强观看体验。滚动字幕的长度和速度也是非常重要的因素。如果滚动字幕太长&#xff0c;会让人感到拖沓&#xff1b;如果滚动字幕太短&#xff0c;会让人感到匆忙。因此&a…

Java设计模式-创建者模式-工厂模式

工厂模式 工厂模式简单工厂模式工厂方法模式抽象工厂模式 工厂模式 要求&#xff1a;由一个特定的工厂提供所需的对象&#xff0c;由工厂来完成对象的创建 工厂模式一般分为三种&#xff1a;简单工厂模式&#xff0c;工厂方法模式&#xff0c;抽象工厂模式 其中简单工厂模式不…

第三方支付支付宝的信息安全分析

随着信息技术的进步&#xff0c;网络结算方式也在迅速发展。网上结算虽然便捷快速&#xff0c;但是如果没有保障的平台或者法律的支持&#xff0c;双方在没有约束的情况下&#xff0c;就会导致拖延、折扣或者拒付等许多经济事件的发生&#xff0c;由此第三方支付就随之产生。第…

三目运算符与if 判断语句的区别

我们用一个案例解释python的判断语句&#xff1a; if a > b &#xff1a;return aelse&#xff1a;return b案例&#xff1a; a 2b 3if a > b:max aelse:max b这样利用python语言&#xff0c;写一个if 判断没有问题吧 三目运算符 下面我们用三目运算符来完成这样一…