栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【剑指offer系列】64. 翻转单词顺序

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【剑指offer系列】64. 翻转单词顺序

这里是剑指offer系列的延续,作者将利用C++实现继续完成该系列的学习,剑指offer,喜欢的话可以点赞关注+收藏,加油更新中ing。
题目64. 翻转单词顺序

输入一个英文句子, 单词之间用一个空格隔开,且句首和句尾没有多余空格。

翻转句子中单词的顺序,但单词内字符的顺序不变。

为简单起见,标点符号和普通字母一样处理。

例如输入字符串"I am a student.",则输出"student. a am I"。

数据范围

输入字符串长度 [0,1000]。

样例

输入:"I am a student."

输出:"student. a am I"
【题解】— 双指针
  • 用 i 遍历字符串,遇到字母空格后的字母即为单词首字母。

  • 然后,用 j = i 开始往后遍历,找到下一个空格或者走到字符串末尾停止。

  • 此时,如果 j 不是字符串结尾,则i 和 j 之间就是单词,用 k 遍历 i 到 j - 1,得到单词。如果 j 指向 是字符串末尾,则 s[j] 也是单词一部分,加入。

  • 将得到的字符串加在结果前面。如果 j 不是字符串末尾,说明后面还有单词,则结果前面再加个空格。

  • 最终输出结果。

复杂度分析:
时间复杂度是O(n^2)。
C++代码实现:
class Solution {
public:
    string reverseWords(string s) {
        string res;
        for(int i = 0; i < s.size(); i++)
        {
            while(s[i] == ' ') i++;//找到单词首字母
            int j = i;
            while(j < s.size() && s[j] != ' ') j ++;//找到单词末尾
            string temp;//保存单词
            for(int k = i; k < j; k++) temp += s[k];
            if(j == s.size() - 1) temp = s[j] + temp;//如果j是字符串末尾,则单词中加入s[j]。

            if(j != s.size()) res = ' ' + temp + res;//如果不是字符串末尾,则结果中需要加入空格
            else res = temp + res;//是字符串末尾,则不需要加入空格。
            i = j ;//找下一个单词

        }
        return res;//返回结果
    }
};

剑指offer系列将后续持续更新,有帮助的话,欢迎点赞、收藏⭐️+关注✌️哟~
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029923.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号