剑指offer 65. 翻转单词顺序

简介: 剑指offer 65. 翻转单词顺序

题目描述

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


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


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


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


数据范围

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

样例

输入:"I am a student."
输出:"student. a am I"


方法一:双指针 O(n)

具体思路如下:

  1. 用两个指针来遍历字符串 s ,截取出每个单词,单词所在区间为 [i,j) ,然后将该单词反转。
  2. 当所有单词反转完之后,再反转整个字符串,这样得到的效果就是最终答案。


我们拿题目样例进行举例,假设现在要翻转字符串 I am a student. 的单词顺序:

第一步: 找到第一个单词,并翻转。

第二步: 找到第二个单词,并翻转。

第三步: 找到第三个单词,并翻转。

第四步: 找到第四个单词,并翻转,注意这里的单词相当于一个字符串,其中是可以包含 . 号的。

第五步: 所有单词都已经翻转完,最后对整个字符串进行翻转,得到的结果就是最终答案。

class Solution {
public:
    string reverseWords(string s) {
        for (int i = 0; i < s.size(); i++)
        {
            int j = i;
            while (j < s.size() && s[j] != ' ')   j++;
            reverse(s.begin() + i, s.begin() + j);
            i = j;
        }
        reverse(s.begin(), s.end());
        return s;
    }
};


欢迎大家在评论区交流~

目录
相关文章
|
6月前
|
Java API C++
leetcode-151:翻转字符串里的单词
leetcode-151:翻转字符串里的单词
58 0
|
6月前
|
Java
【剑指offer】-翻转单词序列-40/67
【剑指offer】-翻转单词序列-40/67
|
6月前
剑指Offer LeetCode 面试题58 - I. 翻转单词顺序
剑指Offer LeetCode 面试题58 - I. 翻转单词顺序
38 0
翻转单词顺序(简单难度)
翻转单词顺序(简单难度)
71 0
翻转单词顺序(简单难度)
|
算法 Java
翻转字符串里的单词 (LeetCode 151)
翻转字符串里的单词 (LeetCode 151)
154 0
|
机器学习/深度学习
跟我打卡LeetCode 58最后一个单词长度&59螺旋矩阵Ⅱ&60排列序列
给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。 如果不存在最后一个单词,请返回 0 。 说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。
96 0
跟我打卡LeetCode 58最后一个单词长度&59螺旋矩阵Ⅱ&60排列序列
|
算法 Java 编译器
【算法】最后一个单词的长度,颠倒二进制位,排列序列等三道算法题目
最后一个单词的长度,颠倒二进制位,排列序列等三道算法题目
60 0
翻转单词顺序
翻转单词顺序
101 0
7-59 翻转单词顺序 (20 分)
7-59 翻转单词顺序 (20 分)
75 0