首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >翻转单词顺序

翻转单词顺序

作者头像
用户4456933
发布2021-06-01 14:59:18
发布2021-06-01 14:59:18
84500
代码可运行
举报
运行总次数:0
代码可运行

难度:简单 来源:剑指 Offer 58 - I

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串 "I am a student. ",则输出 "student. a am I"

示例 1:

代码语言:javascript
代码运行次数:0
运行
复制
输入: "the sky is blue"
输出: "blue is sky the"

示例 2:

代码语言:javascript
代码运行次数:0
运行
复制
输入: "  hello world!  "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

示例 3:

代码语言:javascript
代码运行次数:0
运行
复制
输入: "a good   example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

题解一:分割+倒序

代码语言:javascript
代码运行次数:0
运行
复制
/**
 * @param {string} s
 * @return {string}
 */
var reverseWords = function(s) {
    return s
        .trim()        // 去除首尾空格
        .split(/\s+/)  // 按照空格(可能是多个)分组
        .reverse()     // 反转数组
        .join(' ')     // 合并成字符串
};

题解二:双指针

代码语言:javascript
代码运行次数:0
运行
复制
/**
 * @param {string} s
 * @return {string}
 */
var reverseWords = function(s) {
    s = s.trim()  // 去除字符串左右两边空格
    let res = []
    let j = s.length - 1, i = j  // i、j分别记录单词左右边界
    while(i >= 0) {  // 倒序遍历字符串s
        while(i >= 0 && s.charAt(i) !== ' ') i--  // 确定一个单词的左边界
        res.push(s.substring( i + 1, j + 1 ) + ' ')  // 在单词后面拼一个空格,并加入到返回结果的数组中
        while(i >= 0 && s.charAt(i) === ' ') i--  // 把指针移动到下一个单词的右边界
        j = i
    }
    return res.join('').trim()
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大海我来了 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档