https://leetcode.com/problems/reverse-words-in-a-string-iii/
解法一:遇到字符就压栈,遇到空格或最后一个字符就弹出栈。
class Solution {
public:
string reverseWords(string s) {
int n = s.length();
if(n<=1) return s;
string result="";
stack<char> st;
for(int i=0;i<n;i++){
char a = s[i];
if(a==' '|| i==n-1){//对最后一个字符进行特殊处理
if(i==n-1)//对最后一个字符进行特殊处理
st.push(a);
while(!st.empty()){
result+=st.top();
st.pop();
}
if(i!=n-1)//对最后一个字符进行特殊处理
result+=" ";
}
else{
st.push(a);
}
}
return result;
}
};
解法二:每次找到一个单词的头和尾,将该单词反序
https://www.cnblogs.com/grandyang/p/4606676.html
class Solution {
public:
string reverseWords(string s) {
int n = s.length(), storeIndex=0;
for (int i = 0; i < n; ++i) {
if (s[i] != ' ') {
if (storeIndex != 0) s[storeIndex++] = ' ';
int j = i;
while (j < n && s[j] != ' ') s[storeIndex++] = s[j++];
reverse(s.begin() + storeIndex - (j - i), s.begin() + storeIndex);
i = j;
}
}
return s;
}
};
python解法:
return " ".join([i[::-1] for i in s.split()])