151. Reverse Words in a String
程序员文章站
2024-03-19 18:43:28
...
这道题给出一个字符串,包括一些单词,每个单词中间有空格,要求把句子中的单词倒置。如果单词之间有多个空格,那么只保留一个空格。
首先把整个字符串倒置。然后设置两个指针start和end,每次指向一个完整单词的首尾,然后把这个单词中的字符倒置,完成之后令start = end+1。如果有多个空格,那么这时候start位置是空字符,所以每次while循环开始的时候都要把start位置的空格在字符串中删掉。
还有一个问题,在整个循环结束的时候,有可能最后一个位置是空格,所以必须另外看最后一个位置是不是空格,是的话删掉。
中间还有一个地方出错过,就是nextstart那里。因为end从start开始往后移动,有两种情况会让end停下来,一种是end是空格,还有一种是end是字符串结束符。这两种情况下的nextstart不一样,要注意。
class Solution {
public:
void reverseWords(string &s) {
reverse(s.begin(), s.end());
int start = 0, end = 0;
while(start < s.size()){
if(s[start] == ' '){
s.erase(s.begin() + start);
continue;
}
end = start;
while(end < s.size() && s[end]!=' '){
end++;
}
int nextstart = (end == s.size())?s.size():end+1;
end--;
while(start < end){
swap(s[start], s[end]);
start++;
end--;
}
start = nextstart;
}
if(s[s.size()-1] == ' ')
s.erase(s.begin() + s.size()-1);
}
};
推荐阅读
-
151. Reverse Words in a String
-
leetcode 345 Reverse Vowels of a String
-
Leetcode 344. Reverse String--输入字符数组,倒序输出
-
Python:Reverse Words in a String III题解
-
编写一个函数 reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数。
-
编写一个函数reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数
-
Reverse a String-freecodecamp算法题目
-
[c语言] 编写一个函数reverse_string(char * string)(递归实现)
-
Reverse a String-freecodecamp算法题目
-
LeetCode:Reverse Vowels of a String