当前位置: 首页 > 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!!!

相关文章:

  • 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 题解
  • 远程桌面连接 - 允许电脑从网络外部访问计算机
  • 开放大学门户网站建设/网络营销方式包括哪些
  • 提供邢台企业做网站/b2b平台有哪些网站
  • 杭州做产地证去哪个网站/口碑seo推广公司
  • 有哪些专业做饰品的网站app/做外贸推广
  • 建设一个购物网站需要多少钱/武汉seo楚天
  • 做钓鱼网站判刑/seo新方法