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

【字符串】【双指针翻转字符串+快慢指针】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.rhkb.cn/news/185170.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

求臻人故事 | 年轻的求臻人,厉害了

在这个快节奏的社会中&#xff0c;我们时常忽略了身边的“小人物”&#xff0c;他们或许默默无闻&#xff0c;或许平凡无奇&#xff0c;但他们的经历、奋斗和成就&#xff0c;却能给我们带来深深的启示。让我们一起走进每个平凡的求臻人世界&#xff0c;聆听他们的“大故事”&a…

使用 AIGC ,ChatGPT 快速合并Excel工作薄

职场数据处理&#xff0c;数据分析汇报与统计的过程中&#xff0c;经常会遇到这样的一个问题那就是需要统计的数据源在多个文件中&#xff0c;多个工作薄中&#xff0c;如果要进行数据处理&#xff0c;汇总的时候会很不方便 例如&#xff1a; 如果要汇总6个月的数据可能就得需…

clang插件对llvm源码插桩,分析函数调用日志(2)--google镜像

tick_plot__compile.ipynb clang插件对llvm源码插桩&#xff0c;分析函数调用日志(1) 分析 进出、链、出 df进出df[ df[tickKind].isin( [FuncEnter,FuncReturn] ) ]#代码中&#xff0c;只有在函数进入时&#xff0c;计算了链条长度 并写磁盘 df入df[ df[tickKind].isin…

SQL SERVER Inregration Services-OLE DB、Oracle和ODBC操作

OLE DB链接器 OLE DB插件下载&#xff1a;https://learn.microsoft.com/zh-cn/sql/connect/oledb/download-oledb-driver-for-sql-server?viewsql-server-ver16 配置OLE DB Connection Manager 在点击“新建”时&#xff0c;会弹出警告信息“不支持指定的提供程序&#xff0…

网页制作-引入icon

1.如何引入icon 1.1 进入https://www.iconfont.cn/ 1.2 登录或者注册一下 1.3 在搜索框输入你想搜索的内容 1.4 加入购物车 1.5 在购物车中点击下载代码 1.6 若是普通的html项目&#xff0c;则至需要将如下两个拷贝到你的项目中 1.7 在你需要的网页中引入iconfont.css就可以使…

程序设计:控制台输出二叉树 二叉树的形象显示

本文指导你编写一个输出到字符控制台的形象的二叉树展示。 目录 一般的Tree显示方式 理想的显示方式 实现方法 计算显示位置 输出数据 计算显示位置的代码 输出数据的代码 一般的Tree显示方式 编写二叉树算法时调试是很头疼的&#xff0c;如何显示成一目了然的树结构呢…

WordPress主题 JustNews主题6.0.1(亲测首页不空白)

介绍 资源入口 需要用WordPress5.X版本 JustNews介绍&#xff1a;一款专为博客、自媒体、资讯类的网站设计开发的WordPress主题&#xff0c;自v3.0版开始支持自主研发的前端用户中心&#xff0c;不仅支持注册、登录、账户设置、个人中心等常用页面的添加&#xff0c;还可以上传…

将一个Series序列保存为列表格式Series.to_list()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将Series中的所有值 保存为列表 series.to_list() [太阳]选择题 关于以下代码的说法中正确的是? import pandas as pd s pd.Series([1,2]) print("【显示】s") print(s) print(【执…

SpringBoot使用Mybatis

SpringBoot使用Mybatis Orm 框架的本质是简化编程中操作数据库的编码&#xff0c;发展到现在基本上就剩两家了&#xff0c;一个是宣称可以不用写一句 Sql 的 Hibernate&#xff0c;一个是可以灵活调试动态 Sql 的 Mybatis ,两者各有特点&#xff0c;在企业级系统开发中可以根…

xshell是什么软件,1000字让你完全了解xshell

很多从事开发或网络安全的人都或多或少知道xshell是什么软件&#xff0c;但是如果没有试用过的话可能对它的功能并不完全了解。今天小编就带你详细了解一下Xshell究竟是什么。 xshell是什么软件 一、xshell是什么软件 Xshell是一款功能强大的SSH&#xff08;Secure Shell&…

漏刻有时百度地图API实战开发(4)显示指定区域在移动端异常的解决方案

百度地图JavaScript API使用Boundary方法添加覆盖物显示省市某一区域的解决方案&#xff0c;具体参见&#xff1a;https://blog.csdn.net/weixin_41290949/article/details/105338685 Boundary 表示一个行政区域的边界 一般步骤 百度地图提供new BMap.Boundary()方法根据地区…

大语言模型(LLM)综述(六):大型语言模型的基准和评估

A Survey of Large Language Models 前言7 CAPACITY AND EVALUATION7.1 基本能力7.1.1 语言生成7.1.2 知识利用7.1.3 复杂推理 7.2 高级能力7.2.1 人类对齐7.2.2 与外部环境的交互7.2.3 工具操作 7.3 基准和评估方法7.3.1 综合评价基准7.3.2 评估方法 7.4 实证评估7.4.1 实验设…

51单片机+SIM800C(GSM模块)实现短信发送功能

一、前言 本项目利用51单片机和SIM800C GSM模块实现短信发送功能。短信作为一种广泛应用的通信方式&#xff0c;在许多领域具有重要的作用&#xff0c;如物联网、安防系统、远程监控等。通过将51单片机与SIM800C GSM模块相结合&#xff0c;可以实现在各种应用场景下的短信通信…

516TX 336A4940DNP516TX 具有用于联网工业以太网协议

516TX 336A4940DNP516TX 具有用于联网工业以太网协议 UPS系列旨在通过保护基于微处理器的设备免受破坏性脉冲和电源中断的影响&#xff0c;帮助企业减少生产损失并保持输出水平。 具有用于联网工业以太网协议(例如:以太网/IP)和离散(无源干触点继电器应用)的通信端口&#xf…

搭建 Makefile+OpenOCD+CMSIS-DAP+Vscode arm-none-eabi-gcc 工程模板

STM32F407-GCC-Template Arm-none-eabi-gcc MakefileOpenOCDCMSIS-DAPVscode工程模板 一、本次环境搭建所用的软硬件 1&#xff09;Windows or Linux (本文以Windows为主) 2&#xff09;JLink、Daplink、Wch-Link烧录器 3&#xff09;GNU Arm Embedded Toolchain交叉编译…

13.求面积[有问题]

#include<stdio.h> #include<math.h> #include<bits/stdc.h> using namespace std;void fun(double a,b,c) {double p,c;p (abc)/2;c sqrt(p*(p-a)*(p-b)*(p-c));printf("面积是&#xff1a;%lf",c); }int main(){double a,b,c;scanf("%lf,%…

【LearnOpenGL基础入门——2】搭建第一个OpenGL窗口

目录 一.配置GLFW 二.配置GLAD 三.第一个OpenGL窗口 3.1 GLFW设置 3.2 GLAD设置 3.3 视口 3.4 输入 3.5渲染 在我们画出出色的效果之前&#xff0c;首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而&#xff0c;这些操作在每个系统上都是不一样…

从TCP到Socket,彻底理解网络编程是怎么回事

进行程序开发的同学&#xff0c;无论Web前端开发、Web后端开发&#xff0c;还是搜索引擎和大数据&#xff0c;几乎所有的开发领域都会涉及到网络编程。比如我们进行Web服务端开发&#xff0c;除了Web协议本身依赖网络外&#xff0c;通常还需要连接数据库&#xff0c;而数据库连…

易点易动固定资产管理系统:定制流程与用量控制的高效管理利器

固定资产管理对于企业来说至关重要&#xff0c;而如何提高固定资产管理的效率和精确度一直是企业管理者关注的焦点。易点易动固定资产管理系统以其自定义固定资产流程和用量控制功能&#xff0c;成为了提升固定资产管理效率的利器。本文将详细介绍易点易动固定资产管理系统的自…

功能: 在web应用程序中、读取文件

通过使用文件 API&#xff0c;web 内容可以要求用户选择本地文件&#xff0c;然后读取这些文件的内容。这种选择可以通过使用 HTML <input type"file"> 元素或通过拖放来完成。 1.通过 click() 方法使用隐藏的文件 input 元素 你可以隐藏公认难看的文件 <…