原题目链接
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
直接实现
使用双指针思路:另两个空格键内的字符反转,空格跳过;两指针再指向下一个非空格字符。
class Solution {
public:
string reverseWords(string s) {
if(s.size() == 0)
return s;
int front = 0, back = 0;
for(int i = 0; i <= s.size(); i++)
{
if((s[i] != ' ' && (i < s.size())))
back++;
else
{
reverse(s.begin() + front, s.begin() + back);
front = ++back; //同时指向back后一个元素,跳过一个空格
}
}
return s;
}
};
复杂度分析:
- 时间复杂度:O(N)
- 空间复杂度:O(1)
其他方式
使用栈操作
class Solution {
public:
string reverseWords(string s) {
string stack, ans, temp = " ";
while (!s.empty())
{
char tmp = *(s.end()-1);
s.pop_back();
if (tmp != ' ')
{
stack.push_back(tmp);
}
else
{
ans.insert(ans.begin(), stack.begin(), stack.end());
ans.insert(ans.begin(), temp.begin(), temp.end());
stack = "";
}
}
ans.insert(ans.begin(), stack.begin(), stack.end());
return ans;
}
};
复杂度分析:
- 时间复杂度:O(N)
- 空间复杂度:O(1)
写在最后
最后用Python对比一下🤣
class Solution:
def reverseWords(self, s: str) -> str:
return ' '.join(s.split(' ')[::-1])[::-1]
腾讯精选练习(50 题)到这了就结束了,开学也已经50天,感性的就不写在这里了,再会~
Finale
转载:https://blog.csdn.net/weixin_41728431/article/details/102489768
查看评论