当前位置: 首页 > 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.lryc.cn/news/571157.html

相关文章:

  • 4_STM32F103ZET6芯片系统架构和寄存器
  • 通过自适应训练样本选择弥合基于锚点和无锚点检测之间的差距之ATSS论文阅读
  • 【论文阅读】BACKDOOR FEDERATED LEARNING BY POISONING BACKDOOR-CRITICAL LAYERS
  • Matlab自学笔记五十九:符号变量的代入和替代subs精讲
  • Windows10安装WSL Ubuntu
  • 设计模式:单例模式多种方式的不同实现
  • vue中diff算法的原理
  • 把springboot打包为maven可引入的jar
  • Maven 的 settings.xml详解
  • 深度学习中常见的激活函数分析
  • Android Studio Jetpack Compose毛玻璃特效按钮
  • 【数据结构】栈和队列详解
  • 线性放大器设计方案:248-双极性任意波1M带宽400Vpp高压线性放大器
  • 欧拉安装vboxlinuxadditions时,出错
  • 第九章——8天Python从入门到精通【itheima】-95~96-Python的异常模块与包(自定义模块并导入+自定义Python包)
  • MySQL 命令行的核心操作命令详解
  • 资深Java工程师的面试题目(一)微服务
  • 如何高效分享WordPress博客文章
  • Sparse4D: 稀疏范式的端对端融合
  • (100)课126: 间隙锁临键锁,是为了锁定索引B+树里叶节点之间的间隙,不允许别的事务在这些间隙里插入新的叶节点,从而阻止幻读
  • 振动测控模块设计原理图:276-16路AD、10路DA嵌入式振动测控模块
  • 自然语言处理文本分类
  • Node.js 项目启动命令全面指南:从入门到精通(术语版)
  • Redis中的分布式锁之SETNX底层实现
  • vue3 watch监视详解
  • 最简单的远程桌面连接方法是什么?系统自带内外网访问实现
  • 基于Cesium的倾斜切片/模型位置方位调整工具
  • Android多媒体——MediaCodec回调与配置(二十五)
  • Android App启动流程深度解析(一):从Activity.startActivity开始
  • 常用交易所链接