Typescript 编码编年史:反转字符串中的单词

typescript 编码编年史:反转字符串中的单词

问题陈述:

给定一个输入字符串 s,反转单词的顺序。单词被定义为非空格字符的序列。 s 中的单词将至少由一个空格分隔。返回由单个空格按相反顺序连接的单词字符串。

注意 s 可能包含前导或尾随空格或两个单词之间的多个空格。返回的字符串应该只有一个空格来分隔单词。请勿包含任何多余空格。

示例1:

输入:s =“天空是蓝色的”输出:“蓝色是天空”

示例2:

输入:s =“你好世界”输出:“世界你好”说明:您的反转字符串不应包含前导或尾随空格。

示例3:

输入:s =“一个很好的例子”输出:“例子很好”说明:您需要将两个单词之间的多个空格减少为反转字符串中的单个空格。

限制条件:

1 <= s.length <= 10^4s 包含英文字母(大小写)、数字和空格 ' '.s中至少有一个单词

初步思考过程:

要解决这个问题,我们需要:

将字符串拆分成单词。颠倒单词的顺序。将单词重新连接在一起,每个单词之间有一个空格。

基本解决方案:

代码:

function reversewordsbruteforce(s: string): string {    // split the string by spaces and filter out empty strings    let words = s.trim().split(/s+/);    // reverse the array of words    words.reverse();    // join the words with a single space    return words.join(' ');}

时间复杂度分析:

时间复杂度: o(n),其中n是字符串的长度。分裂、反转和合并都需要线性时间。空间复杂度: o(n),其中n是字符串的长度。我们将单词存储在数组中,将最终结果存储在字符串中。

限制:

考虑到限制,这个解决方案是有效的。但是,它为单词数组使用了额外的空间。

优化方案:

如果字符串数据类型是可变的,并且我们需要使用 o(1) 额外空间就地解决它,我们可以使用两指针技术来反转原始字符串中的单词。

豆包AI编程 豆包AI编程

豆包推出的AI编程助手

豆包AI编程 483 查看详情 豆包AI编程

代码:

function reversewordsoptimized(s: string): string {    // trim the string and convert it to an array of characters    let chars = s.trim().split('');    // helper function to reverse a portion of the array in place    function reverse(arr: string[], left: number, right: number) {        while (left < right) {            [arr[left], arr[right]] = [arr[right], arr[left]];            left++;            right--;        }    }    // reverse the entire array of characters    reverse(chars, 0, chars.length - 1);    // reverse each word in the reversed array    let start = 0;    for (let end = 0; end <= chars.length; end++) {        if (end === chars.length || chars[end] === ' ') {            reverse(chars, start, end - 1);            start = end + 1;        }    }    // join the characters back into a string and split by spaces to remove extra spaces    return chars.join('').split(/s+/).join(' ');}

时间复杂度分析:

时间复杂度: o(n),其中n是字符串的长度。每个字符都会被处理固定次数。空间复杂度: o(1),因为我们正在就地修改数组并仅使用恒定量的额外空间。

基本解决方案的改进:

优化的解决方案通过对字符数组执行就地操作来降低空间复杂度。

边缘情况和测试:

边缘情况:

字符串包含前导空格和尾随空格。字符串中单词之间包含多个空格。该字符串仅包含一个单词。字符串长度达到最小或最大限制。

测试用例:

console.log(reverseWordsBruteForce("the sky is blue")); // "blue is sky the"console.log(reverseWordsBruteForce("  hello world  ")); // "world hello"console.log(reverseWordsBruteForce("a good   example")); // "example good a"console.log(reverseWordsBruteForce("singleWord")); // "singleWord"console.log(reverseWordsBruteForce("   ")); // ""console.log(reverseWordsOptimized("the sky is blue")); // "blue is sky the"console.log(reverseWordsOptimized("  hello world  ")); // "world hello"console.log(reverseWordsOptimized("a good   example")); // "example good a"console.log(reverseWordsOptimized("singleWord")); // "singleWord"console.log(reverseWordsOptimized("   ")); // ""

一般解决问题的策略:

理解问题:仔细阅读问题陈述,了解要求和约束。识别关键操作: 确定所需的关键操作,例如拆分、反转、连接单词。优化可读性: 使用清晰简洁的逻辑,确保代码易于理解。彻底测试: 使用各种情况(包括边缘情况)测试解决方案,以确保正确性。

识别类似问题:

字符串操作:

需要根据具体情况修改字符串的问题示例:颠倒句子中每个单词的字符顺序。

双指针技术:

使用两个指针有助于优化解决方案的问题。示例:从排序数组中删除重复项。

就地算法:

需要在有限的额外空间内进行操作的问题示例:将数组向右旋转 k 步。

结论:

使用暴力方法和优化的就地方法可以有效地解决字符串中单词反转的问题。理解问题并将其分解为可管理的部分至关重要。使用清晰的逻辑并优化可读性可确保解决方案易于遵循。使用各种边缘情况进行测试可确保鲁棒性。识别问题的模式可以帮助将类似的解决方案应用于其他挑战。

通过练习此类问题和策略,您可以提高解决问题的能力,并为各种编码挑战做好更好的准备。

以上就是Typescript 编码编年史:反转字符串中的单词的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/472525.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Java函数式编程如何处理嵌套异常?
上一篇 2025年11月8日 08:09:32
win10系统查看硬盘的使用状态的方法!
下一篇 2025年11月8日 08:09:41

相关推荐

  • 幸运爆棚!女子大兴安岭自驾,十分钟内接连偶遇猞猁与驼鹿。当地林业局:极为罕见,但不建议互动

    近日,在大兴安岭的g331国道上,发生了一件极其幸运的事情。一位姓赵的女士在短短十分钟内,竟接连偶遇了猞猁和驼鹿这两种国家级的保护动物。当地林业部门的工作人员在证实此事后表示,这样的偶遇极为罕见。 第一幕:与“大猫”的邂逅 据赵女士回忆,10月10日下午4时左右,当她们一行人正驾车行驶在G331国道…

    2026年8月29日
    000
  • WPS绘制订单流程图

    WPS绘制订单流程图WPS绘制订单流程图WPS绘制订单流程图WPS绘制订单流程图

    1、 打开WPS文字软件,启动文档处理功能。 2、 进入顶部菜单栏的“插入”选项,点击后选择“在线流程图”功能。 3、 在线流程图库中,浏览并选取一个适用于订单管理系统的示例模板进行应用。 4、 利用所选模板完成订单管理系统流程图的绘制,并预览最终呈现效果。 以上就是WPS绘制订单流程图的详细内容,…

    2026年8月29日 用户投稿
    000
  • Android Studio编译报错Java版本冲突:如何解决Gradle插件与JDK版本不匹配问题?

    Android Studio编译错误:Gradle插件与JDK版本不兼容 Android开发中,编译错误时有发生。本文针对“Android Gradle plugin requires Java 11 to run?”错误进行深入分析及解决方案。此错误提示Android Gradle插件需要Java…

    2026年8月29日
    100
  • 联想z6显示实时网速的操作流程

    php小编百草为您介绍如何联想z6显示实时网速的操作流程。通过简单设置,您可以轻松在手机屏幕上实时查看当前的网络速度,方便掌握网速情况。跟随本文指引,让您的联想z6手机更加智能便捷! 1、在手机桌面点击【设置】。 2、 点击【通知和状态栏】。 3、点击【实时网速】右侧开关,亮色开启,反之关闭。 以上…

    2026年8月29日
    000
  • ThinkPHP 队列(Queue)与异步任务处理

    在thinkphp中,可以使用队列来处理异步任务。具体方法包括:1.定义任务类并实现fire方法;2.使用queue::push方法将任务推送到队列中;3.通过配置驱动(如redis或数据库)来管理和执行任务。这种方式可以有效提升应用性能和用户体验。 引言 在现代Web开发中,异步任务处理和队列管理…

    2026年8月29日
    000
  • 常用的linux命令

    常用的linux命令常用的linux命令常用的linux命令常用的linux命令

    常用的linux命令有:1、cd命令,用于切换目录;2、ls命令,用于显示指定工作目录下的内容;3、pwd命令,用于显示工作目录所在位置;4、mkdir命令,用于创建目录;5、cp命令,用于复制文件或目录等。 相信很多开发、运维都在用linux操作系统吧,因为绝大部分的服务器都是liunx系统。 L…

    2026年8月29日 用户投稿
    100
  • 第一批做小红书的运营,有人年入100万,有人…

    作者 | 张帆 编辑 | 陈维贤 设计 | 蝶哥 小红书是近两年国内为数不多仍保持高速增长的平台了。 数据显示,2022 年,小红书收入 20 亿美元,亏损 2 亿美元;2023 年,小红书收入增长到 37 亿美元,净利润 5 亿美元;彭博社消息称,2024 全年,小红书有望净利润翻倍增长突破 10…

    2026年8月29日
    000
  • 小米SU7 Ultra又爆单,雷军称:昨晚有点失眠

    小米雷军发布会后失眠:小米15 ultra和小米su7 ultra发布引发的激动! ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 小米创始人雷军在2月28日发文表示,小米15 Ultra和小米SU7 Ultra新品发布会后有些失眠,兴奋之情…

    2026年8月29日
    000
  • 电脑出现dxgi_error_device_removed显卡错误

    频繁出现dxgi_error_device_removed错误通常由驱动不稳定、硬件过热、供电不足、系统或游戏文件损坏、超频或软件冲突导致;2. 解决方案包括使用ddu彻底重装显卡驱动、清理散热系统并监控温度、确保电源功率充足且连接稳固、验证游戏完整性或重装游戏、恢复默认频率排除超频影响;3. 彻底…

    2026年8月29日
    100
  • MySQL原理总结之左连接、右连接、内连接与Hash连接

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了左连接、右连接、内连接与hash连接的工作原理,并分析子查询与join的不同,根据所学提供一些工作中需要掌握的实战技巧,下面一起来看一下,希望对大家有帮助。 推荐学习:mysql视频教程 一、MySQL数据库JOIN连接 在多个表上创建索,…

    2026年8月29日
    000
  • SpringBoot2应用在Docker中异常停止(Exited 139)并提示libawt.so错误,该如何解决?

    springboot2 应用部署至 docker 容器后异常停止的排查 本文针对 SpringBoot2 应用在 Docker 容器中运行时出现异常停止的问题进行分析和解答。该问题主要体现在容器日志中显示 Exited (139) 状态码,并伴随 libawt.so 相关的错误信息。 问题描述中,开…

    用户投稿 2026年8月29日
    000
  • ThinkPHP 6 环境配置(Nginx/Apache + PHP 8)

    配置 thinkphp 6 环境需要在 nginx 或 apache 上结合 php 8 进行设置。1) nginx 配置:编辑 nginx.conf 文件,设置 server 块以正确处理 php 文件。2) apache 配置:在 httpd.conf 文件中添加 virtualhost 配置,…

    2026年8月29日
    000
  • 企查查怎么查分支机构_企查查App查询企业下属分支机构详细方法

    首先打开企查查App搜索目标企业进入主页,向下滑动查找“分支机构”或“企业关系”栏目并点击,可查看分公司、子公司等关联企业的名称、法人、成立日期及状态等信息;如需精确查找,可进入“企业关系”或“投资持股”页面点击右上角“筛选”按钮,选择“分支机构”类型,并按地区、时间或状态进一步过滤,确认后即可显示…

    2026年8月29日
    000
  • 谷歌相机隐私设置详解_谷歌相机个人隐私保护功能与配置指南

    谷歌相机可能泄露位置信息,因默认开启地理标记功能,建议关闭“保存位置信息”并限制应用权限,同时谨慎使用Google Photos的面孔分组与备份功能,确保账号安全及分享时剥离敏感元数据。 谷歌相机在我们的日常生活中扮演着越来越重要的角色,它不仅仅是一个拍照工具,更是一个数据收集的入口。关于它的隐私设…

    2026年8月29日
    500
  • 三星note20ultra怎么开启分屏功能_启用note20ultra分屏方法

    php小编子墨为您介绍三星note20 ultra如何开启分屏功能。这款旗舰手机具备强大的多任务处理能力,通过分屏功能可以同时在同一屏幕上显示两个应用程序,极大提升工作效率和操作便捷性。用户只需按照简单的操作步骤,在设置中激活分屏功能即可实现。这一功能在处理邮件、浏览网页、编辑文档等多任务应用场景下…

    2026年8月29日
    000
  • Mac+IDEA+百度富文本UEditor

    Mac+IDEA+百度富文本UEditorMac+IDEA+百度富文本UEditorMac+IDEA+百度富文本UEditorMac+IDEA+百度富文本UEditor

    最近,我在项目中需要嵌入一个富文本编辑器,考虑到百度ueditor的强大功能,决定使用它。然而,从%ignore_a_1%+eclipse环境转到mac+idea后,遇到了几个问题。经过一番努力,终于解决了这些问题,现分享我的经验。 环境:Mac + IDEA + UEditor 基于 Maven+…

    2026年8月29日 用户投稿
    100
  • Java 8字符串常量池到底在堆内存的哪个位置?

    深入探究Java 8字符串常量池在堆内存中的位置 Java 8 字符串常量池的内存位置一直是开发者关注的焦点。本文将深入剖析其在堆内存中的具体位置,并澄清一些常见误解。 从JDK 1.7开始,字符串常量池已从方法区迁移至堆内存。然而,堆内存包含新生代和老年代(以及JDK 7之前的永久代),这使得字符…

    2026年8月29日
    000
  • 小鹏汽车何小鹏:高阶智驾全球化需做到硬件标配、软件免费

    小鹏汽车董事长何小鹏就特斯拉fsd入华发表观点:高阶智驾全球推广需“硬件标配、软件免费、ota迭代”。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 何小鹏指出,小鹏与特斯拉是全球率先将大模型端到端技术应用于量产智能驾驶的企业,也是极少数能…

    2026年8月29日
    100
  • 班级小管家如何删除学生

    首先通过班级成员管理移出学生,进入班级主页点击成员列表,左滑或点击更多按钮选择移出并确认;其次可从学生个人档案删除,进入档案页点击管理按钮完成验证后移除;最后支持批量删除,开启多选模式勾选学生后执行批量移出操作。 如果您在使用班级小管家时需要调整学生名单,可能是因为学生转班或信息录入错误,需要将特定…

    2026年8月29日
    200
  • 怎么在Win10系统中创建本地用户或管理员帐户?

    如何在win10系统里建立本地用户或者管理员账户呢?很多用户在使用计算机时往往只用访客账户,而并非管理员账户,这样可能会让我们在执行特定任务时遇到阻碍。下面我来教大家具体的操作步骤。 具体步骤如下: 点击“开始”菜单,进入“设置” > “账户” > “家庭和其他用户”。在部分Window…

    2026年8月29日
    100

发表回复

登录后才能评论
关注微信