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

山东济南seo整站优化公司广西东晋建设有限公司网站

山东济南seo整站优化公司,广西东晋建设有限公司网站,做的好的自驾游网站,陕西建设人才网站文章目录一、题目描述二、思路分析三、代码实现(Java / 简洁版)复杂度四、进阶:O(1) 空间双指针原地解法五、小结LeetCode 151. 反转字符串中的单词,(难度:中等;通过率:59.1%&#x…

文章目录

  • 一、题目描述
  • 二、思路分析
  • 三、代码实现(Java / 简洁版)
    • 复杂度
  • 四、进阶:O(1) 空间双指针原地解法
  • 五、小结

LeetCode 151. 反转字符串中的单词,(难度:中等;通过率:59.1%),这道题看似简单,却暗藏 字符串预处理双指针技巧 两大经典套路。本文先给出一行正则 + split 的简洁做法,再分享 O(1) 额外空间的原地双指针思路


一、题目描述

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

示例:

输入输出
"the sky is blue""blue is sky the"
" hello world ""world hello"
"a good example""example good a"

额外要求(进阶):如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用 O(1) 额外空间复杂度原地解法


二、思路分析

  1. 去除冗余空格:题目要求结果中只有一个空格分隔,意味着要去掉首尾空格 + 压缩中间多个空格
  2. 单词分割:一旦空格处理完毕,利用分割即可拿到所有单词
  3. 反转组合:将分割得到的单词倒序拼接即可

关键坑点:直接对原字符串 split(" ") 会把连续空格分割出很多 “” 空串,导致结果错误。因此需要使用正则 or 双指针先压缩空格


三、代码实现(Java / 简洁版)

下面这段代码利用正则 "\\s+"1~N 个空白字符视为分隔符,一行搞定空格压缩 + 分割,随后倒序拼接即可

class Solution {public String reverseWords(String s) {// 1.去除首尾空格,按连续空白分割得到单词数组String[] words = s.trim().split("\\s+");// 2.倒序拼接StringBuilder sb = new StringBuilder();for (int i = words.length - 1; i >= 0; i--) {sb.append(words[i]);if (i > 0) sb.append(' '); // 单词间加空格}return sb.toString();}
}

提交结果:

在这里插入图片描述

复杂度

  • 时间复杂度O(N)trimsplit 均线性扫描一次
  • 空间复杂度O(N)split 产生的数组存储单词

四、进阶:O(1) 空间双指针原地解法

如果思考能否原地反转?可以考虑:

  1. 先将整串字符反转
  2. 再逐个单词反转回来
  3. 最后在同一数组中压缩冗余空格

这个思路,有些类似leetcode189:轮转数组(原地后移数组的最佳实践解法)中的三次翻转法

示意步骤(以 " hello world " 为例):

原字符串:__hello__world__
1) 整串反转:__dlrow__olleh__
2) 单词反转:__world__hello__
3) 空格压缩:world hello

该方法仅使用常数级双指针变量,满足 O(1) 额外空间

完整代码如下:

class Solution {// 原地反转 + 双指针,O(1) 额外空间public String reverseWords(String s) {char[] ch = s.toCharArray();int n = ch.length;// 1.整串反转reverse(ch, 0, n - 1);// 2.逐个单词反转回来int start = 0, end;while (start < n) {// 跳过空格while (start < n && ch[start] == ' ') {start++;}if (start >= n) break;end = start;while (end < n && ch[end] != ' ') {end++;}reverse(ch, start, end - 1);start = end;}// 3.压缩空格并构建结果StringBuilder sb = new StringBuilder();for (int i = 0; i < n; ) {if (ch[i] != ' ') {sb.append(ch[i++]);} else {sb.append(' '); // 保留一个空格while (i < n && ch[i] == ' ') {i++; // 跳过多余空格}}}// 4.去除首尾可能的空格int len = sb.length();if (len > 0 && sb.charAt(0) == ' ') {sb.deleteCharAt(0);}if (len > 1 && sb.charAt(sb.length() - 1) == ' ') {sb.deleteCharAt(sb.length() - 1);}return sb.toString();}private void reverse(char[] ch, int l, int r) {while (l < r) {char tmp = ch[l];ch[l++] = ch[r];ch[r--] = tmp;}}
}

提交结果:

在这里插入图片描述


五、小结

  • 字符串题目常见套路:预处理 → 分割/提取 → 再处理/拼接
  • 正则 "\\s+" 在需要压缩连续空白时非常好用;注意 trim() 只能去除首尾空白
  • 关注进阶条件:能否 O(1) 空间 / 原地解。不一定要写出,但要思路清晰
http://www.dtcms.com/a/563866.html

相关文章:

  • 购物车功能网站怎么做的服装网站设计理念
  • 淘宝网现状 网站建设网站建设职位要求
  • 政务网站模板做网站容易学吗
  • 企业解决方案参考网站如何用wordpress站群
  • 闸北企业网站建设企业门户网站有哪些
  • php网站iis设置阿德莱德做网站
  • 网站开发收怎么把店地址申请百度地图
  • 手机网站开发合同wordpress 积分动力
  • 网站建设推广途径门户网站建设计划
  • 甘肃做网站价格功能网站建设多少钱
  • 山西省住房城乡建设厅网站首页网站需求分析怎么写
  • wordpress网站描述企业网络基础建设
  • 锦州哪里做网站昆明互联网公司排名前十
  • 网站建设公司江西网站没有根目录
  • 建网站龙wordpress 一小时建站
  • 自适应型网站建设哪家好wordpress自动视频播放器代码
  • 建设网站需要什么设施?免费推广网站入口2020
  • 网站建设公司 预算网站制作经费预算
  • 网站建设费走什么费用如何用本机电脑做网站服务器吗
  • 常州城乡建设局网站网络营销课程思政
  • 网站建设网站规划书做封面哪个网站好
  • 站长网站优点找人代做网站需要注意什么
  • 网站源码用什么软件制作网站
  • 汕头网站建设技术支持一键生成
  • 唐山做企业网站网页图片分辨率多少合适
  • 可以做结构图的网站php外贸网站
  • 一般做网站用什么字体比较合适模板网站的坏处
  • 质量基础设施一站式服务工作站象山县城乡和住房建设局网站
  • 网站管理工具小语种网站建设
  • 网站建设 黑龙江猎头公司收费