leecode151 反转字符串中的单词(附有手写思路)

【中等】力扣算法题解析LeetCode151:反转字符串中的单词 题目要求反转字符串中的单词顺序并去除多余空格。解法分为三步:1) 使用双指针原地去除多余空格;2) 反转整个字符串;3) 逐个反转单词。Java实现通过trimSpaces、reverse和reverseEachWord方法完成,达到O(1)额外空间复杂度。代码高效处理前导、尾随及多余空格,满足进阶要求。 阅读详情

丑陋的思路

c294dd873c1716a942f21df8f9b108d8_720.png

StringJoiner版本

前言

刚开始我是用StringJoiner写的,因为我看到这个每个元素之间有一个固定的空格我就想着能够直接用这个StringJoiner来进行书写,但是我提交的时候说这个StringJoiner无法识别,因为这个StringJoiner是java8之后才有的东西,于是我就决定用这个StringBuilder去做,但是后来我一想,不对啊,leecode不可能不支持java8啊,于是我才想到原来刷leecode题也是要导包的,不是单纯的写个函数就行了,

代码

leecode如果想要使用这个StringJoiner我们可以去导包

import java.util.StringJoiner;
class Solution {
    public String reverseWords(String s) {
        StringJoiner sj = new StringJoiner(" ");
        int length = s.length();
        int start=length-1,end=length-1;
        while(start>-1){
            //这样并没有排除最后一位是空格的情况
            while(end>-1&&s.charAt(end)==' '){
                end--;
                start=end;
            }
            if(end==-1){
                break;
            }
            while(start>-1&&s.charAt(start)!=' '){
                start--;
            }
            start++;
            sj.add(s.substring(start, end+1));
            end=start-1;  //让end更改位置,这样能够同时修改start的位置
        }
        return sj.toString();
    }
}

StringBuilder版本

package heima_study.day3;

import java.util.Scanner;
//import java.util.StringJoiner;

public class 反转字符串的单词151 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入这个字符串");
        String s = input.nextLine();
        String result = reverseWords(s);
        System.out.println(result);
        input.close();
    }
    public static String reverseWords(String s) {
        StringBuilder sj = new StringBuilder();
        int length = s.length();
        int start=length-1,end=length-1;
        while(start>-1){
            //这样并没有排除最后一位是空格的情况
            while(end>-1&&s.charAt(end)==' '){
                end--;
                start=end;
            }
            if(end==-1){
                break;
            }
            while(start>-1&&s.charAt(start)!=' '){
                start--;
            }
            start++;
            sj.append(s.substring(start, end+1)).append(" ");
            end=start-1;  //让end更改位置,这样能够同时修改start的位置
        }
        if(sj.length()>0){
            sj.setLength(sj.length()-1);
        }
        return sj.toString();
    
    }
}

【LeetCode 中等 字符串】151 翻转字符串里的单词 想要看更加舒服的排版、更加准时的推送 关注公众号“不太灵光的程序员” 每日八点有干货推送,微信随时解答你的疑问 151 翻转字符串里的单词 python3 中等 字符串 给定一个字符串,逐个翻转字符串中的每个单词。 示例 1: 输入: “the sky is blue” 输出: “blue is sky the” 示例 2: 输入: " hello world! " 输出: “world! hello” 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。 示例 3: 输入: . 阅读详情

相关推荐

CentOS 7 常用命令大全

CentOS中Linux命令

m0_63075763的博客 2018

Leetcode代码算法(字符串) —— 反转字符串 、反转字符串II、替换空格 、翻转字符串里的单词、左旋转字符串

本题介绍了一些字符串的算法解法

flyingbread023的博客 653

R语言TCGA数据下载避坑指南:biolinks包实战中的5个常见错误与解决方案

本文详细介绍了使用R语言的TCGAbiolinks包下载TCGA数据时常见的5个错误及其解决方案,包括安装与加载问题、查询构建参数设置、下载中断处理、数据加载格式不匹配以及版本兼容性问题。通过实战案例和代码示例,帮助生物信息学研究者高效获取TCGA数据,避免常见陷阱。

weixin_30892037的博客 84

leecode无法使用StringJoiner,leecode版本

在做这个leecode151反转字符串的时候用了这个StringJoiner,但是这个leecode无法识别,刚开始我还以为是leecode版本不支持,于是我上网搜了一下

everything_study的博客 279

CH340以及CH系列USB转串口驱动下载

在之前使用USB转串口时,很多时候大家可能会不知道去哪下载驱动,然后百度随便下载一个,但往往鱼龙混杂且版本不一,所以今天特意整理一下CH340驱动以及CH系列的官方驱动下载地址,方便大家进行下载也方便自己后期查找,所有链接皆指向官方下载链接,每次下载都可获取官方当前最新驱动。 CH340/CH341 Windows驱动下载链接:CH341SER.EXE下载链接 Linux驱动下载链接:CH341SER_LINUX.ZIP下载链接 Andr...

OIDCAT的博客 4万+

【数据清洗】数据清洗流程及经验

预处理阶段 预处理阶段主要做两件事情: 一是将数据导入处理工具。 二是看数据。包含两个部分:一是看元数据,包括字段解释、数据来源、代码表等等一切描述数据的信息;二是抽取一部分数据,对数据本身有一个直观的了解,并且初步发现一些问题,为之后的处理做准备。 第一步:缺失值清洗 四个步骤: 1、确定缺失值范围:对每个字段都计算其缺失值比例,然后按照缺失比例和字段重要性,分别制定策略。 2、去除不需要的...

JoJo93723的博客 6494

LeetCode反转字符串 java实现

输入: "hello" 输出: "olleh"

love_gzd的博客 736

【谷粒商城】分布式事务与下单

=购物车== 构建gulimall-cart,复制静态资源到nginx,修改网关 购物车分为离线购物车和登录购物车 离线购物车重启浏览器了也还有 1、购物车需求 特点:读多写少,放入数据库并不合适 登录状态:登录购物车 放入数据库 mongodb 放入redis(采用) 登录以后,将离线购物车里合并后清空离线购物车 未登录状态:离线购物车 放入localstorage浏览器的技术 cookie WebSQL 放入redis(采用) 浏览器重启后还在 2、购物车VO (1) 数据结构分析

努力充实,远方可期 1万+

0526-2020-LEETCODE-经典.37序列化二叉树(代码技巧和代码习惯)

比较简洁的写法,是一个新的接口StringJoiner 代码来源于评论区: https://leetcode-cn.com/problems/xu-lie-hua-er-cha-shu-lcof/comments/ // Encodes a tree to a single string. public String serialize(TreeNode root) { Queue<TreeNode> level = new LinkedList<>() {

weixin_43221993的博客 157

9.27华为OD机试真题 新系统 - 均衡调度 (Java/Py/C/C++/Js/Go)

9.26华为OD机试真题 新系统 - 均衡调度 (Java/Py/C/C++/Js/Go)

算法大师! 490

uniapp - 实现PDA扫码枪RFID批量扫描读取示例代码,uni-app APP识别RFID(射频识别)结合硬件设备进行扫描,uniApp调用RFID读写通用方案适配各种设备+完整实例源码教程!

uni-app PDA 读取RFID,基于uniapp开发PDA扫码枪APP:实现RFID批量扫描读取功能,UniApp中的RFID实现,手持机 RFID插件(uni-app集成手持设备rfid插件),uniapp自动识别RFID,uni-app调RFID模块,uni-app RFID识别插件,uniapp读取rfid,uniapp手持设备扫描rfid,uniapp超高频rfid识别,rfid标签识别,uniapp调用RFID读写,uniapp rfid扫码枪,uniapp中如何使用rfid插件,打包上线后

🏆 前端领域优质创作者 1万+

leetcode 字节跳动探索系列

文章目录第一章 挑战字符串无重复字符的最长子串最长公共前缀字符串的排列字符串相乘翻转字符串里的单词简化路径复原IP地址 专题链接: https://leetcode-cn.com/explore/interview/card/bytedance/ 第一章 挑战字符串 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 双指针方案 本题旨在寻找最长无重复子...

codeJxwww's blog 625

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【LeetCode-151】反转字符串中的单词

【LeetCode-151】反转字符串中的单词,在本文中,我们将深入探讨如何反转字符串中的单词顺序。通过详细的解题思路、清晰的代码实现以及生动的案例分析,帮助读者轻松掌握这一经典算法问题。

qq_44530108的博客 972

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

LeetCode 151. 反转字符串中的单词:两种解法深度剖析

本文解析了LeetCode 151题“反转字符串中的单词”的两种解法。第一种利用JavaScript内置API,通过trim、split、reverse和join快速实现,代码简洁但依赖性强。第二种手动模拟反向遍历字符串,逐个拼接单词,体现底层逻辑但需处理边界条件。两种方法的时间复杂度均为O(n),但手动模拟的空间效率更高。文章对比了两种解法的优缺点,并提供了边界测试案例,帮助开发者根据实际场景选择合适方案,同时深入理解字符串处理的核心逻辑。

2401_86788218的博客 1364

151. 反转字符串中的单词

本文解析了力扣151题"反转字符串中的单词"的高效解法。该算法采用双指针从后向前遍历的策略,先去除首尾空格,然后定位单词边界进行反向拼接,最后处理多余空格。相比传统分割-反转方法,这种实现具有O(n)时间复杂度和更优的空间效率,能妥善处理前导/尾随空格及连续空格问题。文章详细拆解了代码逻辑,通过示例演示执行流程,并对比了不同实现方法的优劣,展现了算法设计中对效率、简洁性和边界处理的全面考量。该解法体现了双指针技术在字符串处理中的高效应用。

mrjieke6的博客 860

【必备算法】字符串(反转问题):LeetCode题 151. 翻转字符串里的单词,557. 反转字符串中的单词 III

在看本文之前,最好先看前一篇 字符串(反转问题):LeetCode题 344. 反转字符串,541. 反转字符串 II,917. 仅仅反转字母。然后再看本篇反转字符串的单词。 151. 翻转字符串里的单词² 给定一个字符串,逐个翻转字符串中的每个单词。 示例 1: 输入: "the sky is blue" 输出: "blue is sky the" 示例 2: 输入: " hello world! " 输出: "world! hello" 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转

A minor 2192

(字符串 ) 151. 反转字符串中的单词 ——【Leetcode每日一题】

151. 反转字符串中的单词 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

weixin_43412762的博客 1304

LeetCode 151. 反转字符串中的单词

通过去除多余空格、反转整个字符串以及反转每个单词,我们可以有效地实现字符串中单词顺序的反转。这种方法的时间复杂度为OnO(n)On,其中nnn是字符串的长度。优快云博客链接LeetCode 151. 反转字符串中的单词 - C语言题解。

weixin_48941116的博客 606

算法训练营Day08-LeetCode344. 反转字符串 && 541. 反转字符串 II && 151. 反转字符串中的单词 && KamaCoder54. 替换数字

LeetCode344. 反转字符串 && 541. 反转字符串 II && 151. 反转字符串中的单词 && KamaCoder54. 替换数字

rcsun的博客 1588

代码随想录刷题day24|(字符串篇)151.反转字符串中的单词

1.难点:不会处理单词之间的空格,因为只保留一个,其余去除;2.java中另外三种解法不是很明白;3.去除空格的代码思路好难想。。

m0_64265848的博客 1041

240529 力扣 151. 反转字符串中的单词

但是,通过观察测试事例可以得知,单词和单词之间的空格可能不止一个,并且,句尾句首也可能会有一个或多个空格,在这种情况下按照空格分割可能会得到多个空字符串,此时如果将孔子渡船视作单词给其后面加上空格会造成连续空格的情况。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。最初的思路是,通过空格切分单词,得到字符串数组,交换单词顺序,在除了句尾以外的单词后面都加上空格。如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。反转后的字符串中不能存在前导空格和尾随空格。

crystalkkkk的博客 1076

LeetCode第151题_反转字符串中的单词

给你一个字符串s,请你反转字符串中的顺序。是由非空格字符组成的字符串。s中使用至少一个空格将字符串中的分隔开。返回顺序颠倒且之间用单个空格连接的结果字符串。注意:输入字符串s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

qq_40263592的博客 606

Day08 字符串 | 344.反转字符串、541. 反转字符串II、151.翻转字符串里的单词

代码随想录算法训练营 | # Day08 字符串 | 344.反转字符串、541. 反转字符串II、151.翻转字符串里的单词

P_YOU的博客 1695
上一篇: leecoode54螺旋矩阵——带有调试代码
下一篇: leecode344反转字符串(附有调试代码)
TranquilGlow
博客等级 码龄5年 132粉丝 62原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值