思路
先从前后把前导空格删除,然后把中间多余的空格删除,使用C++的流以空格为分隔符分割字符串,最后用reverse函数逆转。
class Solution {
public:string reverseWords(string s) {//去除首位空格int i,j;for(i=0,j=s.size()-1;;){if(s[i]==' '){++i;}if(s[j]==' '){--j;}if(s[i]!=' '&&s[j]!=' '){break;}}string ans = s.substr(i,j-i+1);string res;bool lastWasSpace= false;for(auto& ch:ans){if(ch==' '){if(!lastWasSpace){res+=ch;}lastWasSpace= true;}else{res+=ch;lastWasSpace= false;}}ans=res;//分割字符串string token;istringstream iss(ans);vector<string> v;while(getline(iss,token,' ')){v.push_back(token);}std::reverse(v.begin(), v.end());ans="";for(int i=0;i<v.size()-1;++i){ans+=(v[i]+" ");}ans+=v[v.size()-1];return ans;}
};
总结
感觉本题可以学习的CPP的字符串处理方法比较多,值得回味学习!