77 lines
1.5 KiB
Markdown
77 lines
1.5 KiB
Markdown
# Leetcode Reverse-Words-In-a-String
|
|
|
|
#### 2022-07-12 09:10
|
|
|
|
> ##### Algorithms:
|
|
> #algorithm #two_pointers
|
|
> ##### Data structures:
|
|
> #DS #string
|
|
> ##### Difficulty:
|
|
> #coding_problem #difficulty-easy
|
|
> ##### Additional tags:
|
|
> #leetcode
|
|
> ##### Revisions:
|
|
> N/A
|
|
|
|
##### Related topics:
|
|
##### Links:
|
|
- [Link to problem](https://leetcode.com/problems/reverse-words-in-a-string-iii/)
|
|
___
|
|
### Problem
|
|
|
|
Given a string `s`, reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.
|
|
|
|
#### Examples
|
|
|
|
**Example 1:**
|
|
|
|
**Input:** s = "Let's take LeetCode contest"
|
|
**Output:** "s'teL ekat edoCteeL tsetnoc"
|
|
|
|
**Example 2:**
|
|
|
|
**Input:** s = "God Ding"
|
|
**Output:** "doG gniD"
|
|
|
|
#### Constraints
|
|
|
|
- `1 <= s.length <= 5 * 104`
|
|
- `s` contains printable **ASCII** characters.
|
|
- `s` does not contain any leading or trailing spaces.
|
|
- There is **at least one** word in `s`.
|
|
- All the words in `s` are separated by a single space.
|
|
|
|
### Thoughts
|
|
|
|
> [!summary]
|
|
> This is a #two_pointers
|
|
|
|
very easy and intuitive.
|
|
|
|
### Solution
|
|
|
|
```cpp
|
|
class Solution {
|
|
void reverse(string &s, int l, int r) {
|
|
if (l >= r) {
|
|
return;
|
|
}
|
|
swap(s[l++], s[r--]);
|
|
reverse(s, l, r);
|
|
}
|
|
|
|
public:
|
|
string reverseWords(string s) {
|
|
int slow = 0, fast;
|
|
for (int i = 0; i < s.size(); i++) {
|
|
if (s[i] == ' ') {
|
|
fast = i - 1;
|
|
reverse(s, slow, fast);
|
|
slow = i + 1;
|
|
}
|
|
}
|
|
reverse(s, slow, s.size() - 1);
|
|
return s;
|
|
}
|
|
};
|
|
``` |