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

力扣经典算法篇-17-反转字符串中的单词(逆序遍历,数组分割,正则表达式)

1、题干

给你一个字符串s ,请你反转字符串中单词的顺序。
单词是由非空格字符组成的字符串。s中使用至少一个空格将字符串中的单词分隔开。
返回单词顺序颠倒且单词之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

示例 1:
输入:s = “the sky is blue”
输出:“blue is sky the”

示例 2:
输入:s = " hello world "
输出:“world hello”
解释:反转后的字符串中不能存在前导空格和尾随空格。

示例 3:
输入:s = “a good example”
输出:“example good a”
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。

提示:
1 <= s.length <= 104
s 包含英文大小写字母、数字和空格 ’ ’
s 中 至少存在一个 单词

2、解题

方法一:逆序遍历比较
字符串逆序遍历,当遇到非空格时,插入临时字符串的头部,遇到空格,结束临时字符串的拼接。

代码示例:

public static String reverseWords(String s) {StringBuilder result = new StringBuilder();s = s.trim();for (int i = s.length() - 1; i >= 0; i--) {StringBuilder tempWord = new StringBuilder();char c = s.charAt(i);while (c != ' ' && i >= 0) {tempWord.insert(0, c);if (i > 0) {i--;c = s.charAt(i);} else {break;}}if (tempWord.length() > 0) {result.append(tempWord).append(" ");}}return result.toString().trim();}

方法二:数组分割
使用空格进行数组分割,当如果是空字符串时跳过,手动添加空格。

代码示例:

public static String reverseWords(String s) {StringBuilder result = new StringBuilder();String[] s1 = s.trim().split(" ");for (int i = s1.length-1; i >=0; i--) {if (!"".equals(s1[i].trim())){result.append(s1[i]).append(" ");}}return result.toString().trim();}

方法三:正则表达式
使用正则表达式进行分割,\s可以表示1个或多个空格分隔,刚好分割后就不存在空字符串的数组。

代码示例:

public static String reverseWords(String s) {s= s.trim();// \\s 表示任意 空白字符  +表示出现1次获取多次List<String> wordList = Arrays.asList(s.split("\\s+"));Collections.reverse(wordList);return String.join(" ",wordList);}

向阳出发,Dare To Be!!!

http://www.dtcms.com/a/252473.html

相关文章:

  • java 基础方法 list分页
  • Modern C++(五)初始化
  • 为什么晶振电路要并联1MΩ电阻?为什么有的并联了,有的又没有?
  • 华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio搭建Chatbox AI聊天助手
  • 当 GitLab 服务器网络配置发生变化,如何修改
  • 基于python机器学习来预测含MLP决策树LGBM随机森林XGBoost等
  • ArkUI-X与Android联动编译开发指南
  • C++ 学习 C++独有的核心特性 2025年6月16日18:11:04
  • 什么是FlinkSQL中的时态表?以及怎么使用?
  • 智能制造——解读117页大型制造型集团五年发展战略规划项目规划方案【附全文阅读】
  • window显示驱动开发—渲染管道
  • 输入网址到网页显示
  • 设计模式-开闭原则(Open/Closed Principle, OCP)
  • FastAPI:(1)并发async与await
  • 用Keil调试出现 “not in scope“ 问题解决
  • 时序数据库的起源与基础概念简介
  • 数据结构第八章(三)-选择排序
  • 如何用div手写一个富文本编辑器(contenteditable=“true“)
  • AT_abc410_f [ABC410F] Balanced Rectangles 题解
  • 远程桌面连接 - 允许电脑从网络外部访问计算机
  • 视频设备:直联正常,通过卫星无画面,因为延迟太大
  • Flutter动画全解析:从AnimatedContainer到AnimationController的完整指南
  • 从源码出发:全面理解 Kafka Connect Jdbc与Kafka Connect 机制
  • 基于RISC-V架构的服务器OS构建DevOps体系的全方位方案
  • 神经网络课设
  • 关于 常见 JavaScript 混淆类型
  • 八股---9.消息中间件
  • Redis中的分布式锁之SETNX底层实现
  • 资深Java工程师的面试题目(一)并发编程
  • Agent开发相关工具