力扣:151.翻转字符串里的单词
链接https://leetcode-cn.com/problems/reverse-words-in-a-string/
思路:将源字符串多余空格去掉,根据空格切割单词,用栈储存单词,出栈拼接单词即完成反转。
代码如下:
class Solution {
public:
string reverseWords(string s) {
stack<string> stk;
int m = s.size();
string mid="";
string res="";
int begin = 0,end = m-1;
while(s[begin]==' ')begin++;
while(s[end]==' ')end--;
int left = begin,right = end;
while(left<=right){
if(s[left]!=' '){
mid+=s[left];
left++;
}else{
if(left>begin&&s[left-1]!=' '){
mid+=s[left];
left++;
}else if(left>begin&&s[left-1]==' '){
left++;
}
}
}
int cap = 0;
for(int i =0;i<mid.size();i++){
if(mid[i]==' '){
stk.push(mid.substr(cap,i-cap));
cap=i+1;
}
}
if(cap<mid.size()){
stk.push(mid.substr(cap,mid.size()-cap));
}
while(!stk.empty()){
res+=stk.top();stk.pop();
if(stk.size()>=1){
res+=' ';
}
}
return res;
}
};