一:题目
二:上码
class Solution {
public://利用双指针使除去多余的空格,定义快慢指针,最后满指针指向的位置就是除去冗余空格后的字符串//大小void removespacing(string& s){int slowIndex = 0,fastIndex = 0;//去掉字符串前面的字符while(s.size() > 0 && fastIndex < s.size() && s[fastIndex] == ' ') {fastIndex++;}for(; fastIndex < s.size(); fastIndex++) {//这里是处理中间多余的空格 比如两个空格挨着一块,那么我们就得选择去掉一个if(fastIndex - 1 > 0 && s[fastIndex - 1] == s[fastIndex] && s[fastIndex] == ' '){continue;}else{s[slowIndex] = s[fastIndex];slowIndex++;}}if(slowIndex - 1 > 0 && s[slowIndex-1] == ' '){ //如果最后一个字符是空格s.resize(slowIndex-1);}else{s.resize(slowIndex);//这里的的size()数值上是比字符数多一个}}//将整个字符串反转void reverseStr(string& s,int start,int end){for(int i = start,j = end; i < j; i++,j--) {swap(s[i],s[j]);}}string reverseWords(string s) {/**思路:1.移除字符串中多余的空格(多余的空格指的是 字符串前面 字符串中间 字符串后面)2.将整个字符串反转3.将每个单词反转*/removespacing(s);reverseStr(s,0,s.size()-1);for(int i = 0; i < s.size(); i++){int j = i;while(j < s.size() && s[j] != ' '){j++;}reverseStr(s,i,j-1);i = j;//为下一个单词做准备}return s;}
};
这个题可以复习前面刷数组的时候的快慢指针 还可以复习昨天学的反转字符串