您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# LeetCode怎样翻转字符串中的单词
## 问题描述
在LeetCode的[151. 翻转字符串里的单词](https://leetcode-cn.com/problems/reverse-words-in-a-string/)题目中,要求我们:
给定一个字符串 `s`,逐个翻转字符串中每个单词的顺序,同时:
1. 移除前导、尾随和单词间多余的空格
2. 保证翻转后的字符串中单词间有且仅有一个空格分隔
示例:
输入: “ hello world ” 输出: “world hello”
## 解题思路分析
### 方法一:使用语言内置函数(快速解法)
大多数编程语言都提供字符串操作的内置方法,可以快速实现需求:
```python
def reverseWords(s: str) -> str:
return " ".join(reversed(s.split()))
复杂度分析: - 时间复杂度:O(n) - 空间复杂度:O(n)
面试时面试官通常希望看到自行实现的完整逻辑,主要分为三个步骤:
def reverseWords(s: str) -> str:
# 1. 去除多余空格
def trim_spaces(s):
left, right = 0, len(s) - 1
# 去除首尾空格
while left <= right and s[left] == ' ':
left += 1
while left <= right and s[right] == ' ':
right -= 1
# 去除中间多余空格
output = []
while left <= right:
if s[left] != ' ':
output.append(s[left])
elif output[-1] != ' ':
output.append(s[left])
left += 1
return output
# 2. 反转字符数组
def reverse(l, left, right):
while left < right:
l[left], l[right] = l[right], l[left]
left += 1
right -= 1
# 3. 反转每个单词
def reverse_each_word(l):
n = len(l)
start = end = 0
while start < n:
# 找到单词末尾
while end < n and l[end] != ' ':
end += 1
# 反转单词
reverse(l, start, end - 1)
# 更新指针
start = end + 1
end += 1
l = trim_spaces(s)
reverse(l, 0, len(l) - 1)
reverse_each_word(l)
return ''.join(l)
在实际编码中需要特别注意以下边界情况:
" "
应返回 ""
"a b"
应变为 "b a"
" hello "
变为 "hello"
public String reverseWords(String s) {
// 去除首尾及中间多余空格
StringBuilder sb = trimSpaces(s);
// 反转整个字符串
reverse(sb, 0, sb.length() - 1);
// 反转每个单词
reverseEachWord(sb);
return sb.toString();
}
string reverseWords(string s) {
// 反转整个字符串
reverse(s.begin(), s.end());
int n = s.size();
int idx = 0;
for (int start = 0; start < n; ++start) {
if (s[start] != ' ') {
// 填入一个空格
if (idx != 0) s[idx++] = ' ';
// 遍历到单词末尾
int end = start;
while (end < n && s[end] != ' ')
s[idx++] = s[end++];
// 反转当前单词
reverse(s.begin() + idx - (end - start), s.begin() + idx);
// 更新start
start = end;
}
}
s.erase(s.begin() + idx, s.end());
return s;
}
解决这类字符串问题通常有以下几个关键点:
建议读者在理解解法后,尝试自己实现一遍,并思考是否有其他解决方法。这道题也是微软、亚马逊等公司面试中的高频题目,值得重点掌握。 “`
注:实际字数约1100字,可根据需要补充更多实现细节或示例测试用例达到1200字要求。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。