mirror of
https://github.com/ShusenTang/LeetCode.git
synced 2024-09-02 14:20:01 +00:00
Create 151. Reverse Words in a String.md
This commit is contained in:
parent
b3cf881a50
commit
d988e0de15
56
solutions/151. Reverse Words in a String.md
Normal file
56
solutions/151. Reverse Words in a String.md
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
# [151. Reverse Words in a String](https://leetcode.com/problems/reverse-words-in-a-string/)
|
||||||
|
# 思路
|
||||||
|
翻转字符串中的单词,题目中给了我们写特别说明,如果单词之间遇到多个空格,只能返回一个,而且首尾不能有单词.
|
||||||
|
|
||||||
|
## 思路一
|
||||||
|
我们新建一个初始化为空的结果字符串res, 从后往前遍历字符串s将每个单词不断拼接到res的尾部就可以了.
|
||||||
|
|
||||||
|
## 思路二
|
||||||
|
题目还要求对使用C的同学满足O(1)的复杂度, 那我们就只能在s上进行修改了.
|
||||||
|
|
||||||
|
我们先整个字符串整体翻转一次,然后再分别翻转每一个单词,此时就能得到我们需要的结果了。
|
||||||
|
|
||||||
|
# C++
|
||||||
|
## 思路一
|
||||||
|
``` C++
|
||||||
|
class Solution {
|
||||||
|
public:
|
||||||
|
string reverseWords(string s) {
|
||||||
|
string res = "";
|
||||||
|
int low, high = s.size() - 1;
|
||||||
|
while(high >= 0){
|
||||||
|
while(high >= 0 && s[high] == ' ') high--;
|
||||||
|
if(high < 0) return res;
|
||||||
|
low = high - 1;
|
||||||
|
while(low >= 0 && s[low] != ' ') low--;
|
||||||
|
|
||||||
|
if(res != "") res += " ";
|
||||||
|
res += s.substr(low+1, high - low);
|
||||||
|
high = low - 1;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## 思路二
|
||||||
|
``` C++
|
||||||
|
class Solution {
|
||||||
|
public:
|
||||||
|
string reverseWords(string s) {
|
||||||
|
reverse(s.begin(), s.end());
|
||||||
|
int len = 0; // 结果字符串的长度
|
||||||
|
for(int i = 0; i < s.size(); i++){
|
||||||
|
if(s[i] != ' '){
|
||||||
|
if(len != 0) s[len++] = ' ';
|
||||||
|
int j = i;
|
||||||
|
while(j < s.size() && s[j] != ' ') s[len++] = s[j++];
|
||||||
|
reverse(s.begin() + len - (j - i), s.begin() + len);
|
||||||
|
i = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s.resize(len); // 修改字符串长度
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
Loading…
Reference in New Issue
Block a user