进出栈法:栈完成倒序
- 利用栈来完成字符串的倒序
- 字符串的切片用substr(pos,len),切片出从pos开始的长度为len出的新字符串
- 原字符串加" "使得最后字符串片段不用特殊处理
- 别忘加空格,最后一个切片不用加
class Solution {
public:
string ReverseSentence(string str) {
if(str.empty())
{
return str;
}
stack<string> st;
int start=0;
str+=" ";
for(int i=0;i<str.size();i++)
{
if(str[i]==' ')
{
st.push(str.substr(start,i-start));
start=i+1;
}
}
str="";
while(st.size())
{
str+=st.top();
st.pop();
if(st.size())
{
str+=" ";
}
}
return str;
}
};
字符二次翻转法
- 空间想像力和经验
- 翻转整体字符串,再翻转部分字符串片段
- reverse(start,end) 翻转不包括end,在原字符串翻转
class Solution {
public:
string ReverseSentence(string str) {
//reverse
if(str.empty())
{
return str;
}
reverse(str.begin(),str.end());
int start=0;
for(int i=0;i<str.size();i++)
{
if(str[i]==' ')
{
reverse(str.begin()+start,str.begin()+i);
start=i+1;
}
}
reverse(str.begin()+start,str.end());
return str;
}
};