前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode每日一题 557: 反转字符串中的单词 III

LeetCode每日一题 557: 反转字符串中的单词 III

作者头像
benny
发布2019-03-07 10:30:03
8170
发布2019-03-07 10:30:03
举报

周末快乐, 恢复更新了.

题目

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序

示例 1:

输入: "Let's take LeetCode contest"

输出: "s'teL ekat edoCteeL tsetnoc"

注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格



分析

不同于之前的反转字符串I, 这道题反转的是一个句子或多个单词的短语, 并且不是原地反转在 C 的实现中, 原先的原地解法仍可保留, 不过在此基础上, 添加一个检测单词的功能, 再调用此前的解法逐一对单词进行反转即可.

在 Python 实现中, 传入的也不再是字符数组, 而是一个字符串. 字符串在 Python 中是不可变的类型, 之前那道题的写法在这里就不能直接用了.


实现

C语言

代码语言:javascript
复制
char* reverse(char* s, int from, int to);

char* reverseWords(char* s) {
    int from = 0, to = 0;
    while(s[to] != '\0'){
        if(s[to] != ' ')
            to++;
        else{
            reverse(s, from, to-1);
            from = ++to;
        }
    }
    reverse(s, from, to-1);
    return s;
}

char* reverse(char* s, int from, int to){
    while(from < to){
        char temp = s[from];
        s[from++] = s[to];
        s[to--] = temp;
    }
    return s;
}

Python

在Python的实现中, 我没有采用上方C的解法, 原因是传入和返回的均非字符串数组, 若采用原地反转需要先转数组(单词), 再转回字符串(单词), 再拼接字符串数组(句子), 最后转回字符串返回(句子).

整个过程过于繁琐, 这里直接用 Python 的数组自带的方法, 对整个字符串做两次翻转实现反转字符串.

第一次整体反转, 整个字符串逆序.( s[::-1]) 第二次单词次序反转, 对反转字符串分割为单词列表( s[::-1].split()), 对单词次序反转( s[::-1].split()[::-1]).

代码语言:javascript
复制
class Solution:
    def reverseWords(self, s):
        """
        :type s: str
        :rtype: str
        """
        return ' '.join(s[::-1].split()[::-1])

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员的碎碎念 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 周末快乐, 恢复更新了.
  • 题目
  • 分析
  • 实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档