题目描述
输入一个英文句子,单词之间用一个空格隔开,且句首和句尾没有多余空格。
翻转句子中单词的顺序,但单词内字符的顺序不变。
为简单起见,标点符号和普通字母一样处理。
例如输入字符串"I am a student.",则输出"student. a am I"。
数据范围
输入字符串长度 [0,1000]。
样例
输入:"I am a student." 输出:"student. a am I"
方法一:双指针 O(n)
具体思路如下:
- 用两个指针来遍历字符串
s
,截取出每个单词,单词所在区间为[i,j)
,然后将该单词反转。 - 当所有单词反转完之后,再反转整个字符串,这样得到的效果就是最终答案。
我们拿题目样例进行举例,假设现在要翻转字符串 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; } };
欢迎大家在评论区交流~