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

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

相关文章:

  • 3D Gaussian Splatting:用于实时的辐射场渲染
  • 【nlp】文本处理的基本方法
  • C++17 std::filesystem
  • JVM在线分析-解决问题的工具一(jinfo,jmap,jstack)
  • [深度学习]不平衡样本的loss
  • 【MySQL】表的增删改查(强化)
  • MyBatis-Plus--在xml中使用wrapper的方法
  • Oracle RAC是啥?
  • springboot中定时任务cron不生效,fixedRate指定间隔失效,只执行一次的问题
  • 苹果手机发热发烫是什么原因?看完这篇你就知道了!
  • 民安智库(第三方满意度调研公司):助力健身房提升客户满意度的秘密武器
  • 2011年09月01日 Go生态洞察:Go语言词法扫描与App Engine演示
  • pytorch搭建squeezenet网络的整套工程(升级版)
  • 222. 完全二叉树的节点个数
  • adb and 软件架构笔记
  • 算术运算符、自增自减运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符
  • k8s 配置资源管理
  • expo + react native项目隐藏状态栏踩坑
  • 若依:用sqlite3随便掰饬掰饬
  • 刚安装的MySQL使用Navicat操作数据库遇到的问题
  • 物奇平台耳机宕机恢复功能实现
  • 前端学习地址_备忘录(随时更新)
  • 安卓数据恢复工具哪个强? 10 个最佳 Android 数据恢复应用程序
  • 在IDEA中配置Web开发环境
  • Cesium 相机设置
  • 【虹科干货】TWAMP:什么是双向主动测量协议?
  • bool型的盲注
  • 聊聊logback的ShutdownHook
  • 【第2章 Node.js基础】2.4 Node.js 全局对象...持续更新
  • 大数据毕业设计选题推荐-河长制大数据监测平台-Hadoop-Spark-Hive