面试经典150题——反转字符串中的单词

面试经典150题 day21

      • 题目来源
      • 我的题解
        • 方法一 双指针
        • 方法二 库函数+正则匹配
        • 方法三 自定义函数
        • 方法四 双端队列

题目来源

力扣每日一题;题序:151

我的题解

方法一 双指针

先将首尾的空格删除,然后使用两个指针从后往前遍历,end指针指向单词的末尾的下一位,start指向单词的首位的前一位。

时间复杂度
空间复杂度

public String reverseWords(String s) {s=s.trim();int start=s.length()-1;int end=s.length();StringBuilder sb =new StringBuilder();while(start>=0){while(start>=0&&s.charAt(start)!=' ')start--;if(start>=0){sb.append(s.substring(start+1,end));sb.append(' ');}else{sb.append(s.substring(0,end));}while(start>=0&&s.charAt(start)==' ')start--;end=start+1;}return sb.toString();
}
方法二 库函数+正则匹配

利用trim、split、以及Collections.reverse和String.join几个库函数。在使用split分割函数时需要注意匹配多个连续空格

时间复杂度:O(n)
空间复杂度:O(n)

public String reverseWords(String s) {// 除去开头和末尾的空白字符s=s.trim();// 正则匹配连续的空白字符作为分隔符分割String[] strs=s.split("\\s+");List<String> wordL=Arrays.asList(strs);Collections.reverse(wordL);return String.join(" ",wordL);
}
方法三 自定义函数

自己实现去除前后空格和内部多余空格的trimSpace函数,反转[start,end]的反转函数reverse,反转每个单词的reverseEachWord函数

时间复杂度:O(n)
空间复杂度:O(n)

public String reverseWords(String s) {// 除去开头和末尾的空白字符StringBuilder sb=trimSpace(s);//反转整个字符串reverse(sb,0,sb.length()-1);//翻转每个单词reverseEachWord(sb);return sb.toString();
}
public StringBuilder trimSpace(String s){int start=0;int n=s.length();while(start<n&&s.charAt(start)==' ')start++;int end=n-1;while(end>=0&&s.charAt(end)==' ')end--;StringBuilder sb=new StringBuilder();//删除内部多余的空格while(start<=end){char c=s.charAt(start);if(c!=' ')sb.append(c);else if(sb.charAt(sb.length()-1)!=' '){sb.append(c);}start++;}return sb;
}public void reverse(StringBuilder sb,int start,int end){while(start<end){char s=sb.charAt(start);char e=sb.charAt(end);sb.setCharAt(start++,e);sb.setCharAt(end--,s);}
}public void reverseEachWord(StringBuilder sb){int n=sb.length();int start=0,end=0;while(start<n){while(end<n&&sb.charAt(end)!=' ')end++;reverse(sb,start,end-1);while(end<n&&sb.charAt(end)==' ')end++;start=end;end++;}
}
方法四 双端队列

双端队列可以在两端入队,在这里采用在头部

时间复杂度:O(n)
空间复杂度:O(n)

public String reverseWords(String s) {s=trimSpace(s);int n=s.length();int start=0;Deque<String> queue=new LinkedList<>();while(start<n){int end=start;while(end<n&&s.charAt(end)!=' '){end++;}queue.offerFirst(s.substring(start,end));start=end+1;}return String.join(" ",queue);
}
public String trimSpace(String s){int start=0;int n=s.length();while(start<n&&s.charAt(start)==' ')start++;int end=n-1;while(end>=0&&s.charAt(end)==' ')end--;StringBuilder sb=new StringBuilder();//删除内部多余的空格while(start<=end){char c=s.charAt(start);if(c!=' ')sb.append(c);else if(sb.charAt(sb.length()-1)!=' '){sb.append(c);}start++;}return sb.toString();
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

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

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

相关文章

strcpy,strncpy函数详解

strcpy函数 在C语言中&#xff0c;strcpy()函数用于将一个字符串复制到另一个字符串中。 函数原型如下&#xff1a; char *strcpy(char *destination, const char *source);参数解释&#xff1a; destination&#xff1a;目标字符串&#xff0c;将会被复制到。source&#…

(iFlyCode、FREEGPT、Copilot、AIPlus、稳定高效)分享好用的ChatGPT

目录 1、iFlyCode 2、FREEGPT 3、Microsoft Copilot: 你的日常 AI 助手 4、AIPlus

Ubuntu中常用的解/压缩命令

Ubuntu中常用的解/压缩命令 一、tar文件tar.tgz文件tar.gz文件tar.bz文件tar.bz2文件tar.Z文件 二、zip文件三、rar文件四、gz文件五、bz文件bz2文件 六、Z文件七、tgz文件八、lha文件 一、tar文件 解压&#xff1a;tar xvf FileName.tar 压缩&#xff1a;tar cvf FileName.ta…

Servlet(三个核心API介绍以及错误排查)【二】

文章目录 一、三个核心API1.1 HttpServlet【1】地位【2】方法 1.2 HttpServletRequest【1】地位【2】方法【3】关于构造请求 1.3 HttpServletResponse【1】地位【2】方法 四、涉及状态码的错误排查&#xff08;404……&#xff09;五、关于自定义数据 ---- body或query String …

计算机网络 备查

OSI 七层模型 七层模型协议各层实现的功能 简要 详细 TCP/IP协议 组成 1.传输层协议 TCP 2.网络层协议 IP 协议数据单元&#xff08;PDU&#xff09;和 封装 数据收发过程 数据发送过程 1. 2.终端用户生成数据 3.数据被分段&#xff0c;并加上TCP头 4.网络层添加IP地址信息…

nuxt3使用记录五:禁用莫名其妙的Tailwind CSS(html文件大大减小)

发现这个问题是因为&#xff0c;今天我突然很好奇&#xff0c;我发现之前构建的自动产生的200.html和404.html足足290k&#xff0c;怎么这么大呢&#xff1f;不是很占用我带宽&#xff1f; 一个啥东西都没有的静态页面&#xff0c;凭啥这么大&#xff01;所以我就想着手动把他…

用Typescript写自动化工作流

项目地址&#xff1a;acao 挺早之前写过一个工具帮我构建项目并发布到指定平台&#xff0c;主要流程就是获取项目根目录下的配置文件&#xff0c;然后根据配置文件在本地通过 docker 构建一个镜像然后 push 到镜像仓库&#xff0c;最后通过 ssh 连接指定的服务区执行发布任务 …

Github Action Bot 开发教程

Github Action Bot 开发教程 在使用 Github 时&#xff0c;你可能在一些著名的开源项目&#xff0c;例如 Kubernetes&#xff0c;Istio 中看到如下的一些评论&#xff1a; /lgtm /retest /area bug /assign xxxx ...等等&#xff0c;诸如此类的一些功能性评论。在这些评论出现…

Django-基础篇

Django是一个开放源代码的Web应用框架&#xff0c;由Python语言编写。它遵循MVC&#xff08;Model-View-Controller&#xff09;的软件设计模式&#xff0c;使开发者能够以高效、可扩展和安全的方式构建Web应用程序。 Django具有以下特点和优势&#xff1a; 强大的功能&#x…

MR混合现实情景实训教学系统在军事课堂上的应用

在现代军事教育中&#xff0c;实践教学的重要性日益凸显。传统的军事课堂教育方式往往侧重于理论知识的传授&#xff0c;而忽视了实践操作的重要性。而MR混合现实情景实训教学系统的引入&#xff0c;为军事课堂教育带来了全新的可能性。 MR混合现实情景实训教学系统是一种结合了…

面试笔记——线程池

线程池的核心参数&#xff08;原理&#xff09; public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler)corePoolSize …

利用word2vec包将中文转变为词向量

代码展示&#xff1a; import jieba import re import json import logging import sys import gensim.models as word2vec from gensim.models.word2vec import LineSentence, loggerpattern u[\\s\\d,.<>/?:;\\"[\\]{}()\\|~!\t"#$%^&*\\-_a-zA-Z&…

C#创建obj三维模型文件

介绍 使用开源库创建obj三维模型文件。 开源库地址&#xff1a;https://github.com/JeremyAnsel/JeremyAnsel.Media.WavefrontObj 相关API地址&#xff1a;https://jeremyansel.github.io/JeremyAnsel.Media.WavefrontObj/api/JeremyAnsel.Media.WavefrontObj.ObjFile.html …

【docker】开放Docker端口

【docker 】 安装docker&#xff08;centOS7&#xff09;-CSDN博客 【docker】常用命令-CSDN博客 【docker】centos7配置docker镜像加速_docker仓库加速地址-CSDN博客 【docker】Hello World-CSDN博客 【docker 】Compose 使用介绍_docker compose 使用-CSDN博客 【docker…

linux(ubuntu18.04.2) Qt编译 MySQL(8.0以上版本)链接库 Qt版本 5.12.12及以上 包含Mysql动态库缺失问题

整理这篇文档的意义在于&#xff1a;自己走了很多弯路&#xff0c;淋过雨所以想为别人撑伞&#xff0c;也方便回顾&#xff0c;仅供参考 一、搭建开发环境&#xff1a; 虚拟机&#xff08;ubuntu-20.04.6-desktop-amd64&#xff09;&#xff1a;Mysql数据库 8.0.36Workbench …

tidb离线本地安装及mysql迁移到tidb

一、背景&#xff08;tidb8.0社区版&#xff09; 信创背景下不多说好吧&#xff0c;从资料上查tidb和OceanBase“兼容”&#xff08;这个词有意思&#xff09;的比较好。 其实对比了很多数据库&#xff0c;有些是提供云服务的&#xff0c;有些“不像”mysql&#xff0c;综合考虑…

智能合约语言(eDSL)—— wasmtime实现合约引擎补充

1、链上下文 由于我们是应用到区块链中&#xff0c;所以我们需要把链的环境传递给wasmtime&#xff0c;这样wasmtime在运行合约的时候&#xff0c;就可以获取到链上数据&#xff1b;我们运行合约当时的环境&#xff0c;打包成一个变量context&#xff0c;传递给wasmtime。conte…

【如何使用SSH密钥验证提升服务器安全性及操作效率】(优雅的连接到自己的linux服务器)

文章目录 一、理论基础&#xff08;不喜欢这部分的可直接看具体操作&#xff09;1.为什么要看本文&#xff08;为了zhuangbility&#xff09;2.为什么要用密钥验证&#xff08;更安全不易被攻破&#xff09;3.密码验证与密钥验证的区别 二、具体操作1.生成密钥对1.1抉择&#x…

计算机复试项目:SpringCloud实战高并发微服务架构设计

秒杀购物商城--环境搭建 秒杀购物商城基础服务组件--详细介绍 秒杀购物商城基础服务--权限中心 秒杀购物商城业务服务--收货地址 秒杀购物商城业务服务--秒杀活动服务 秒杀购物商城--购物车的功能设计及分析 秒杀购物商城基础服务-用户中心 秒杀购物商城业务服务--商品中…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之九 简单进行嘴巴检测并添加特效的功能实现

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之九 简单进行嘴巴检测并添加特效的功能实现 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之九 简单进行嘴巴检测并添加特效的功能实现 一、简单介绍 二、简单…