题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
解题思路
暴力求解,一个单词一个单词的交换,本地样例是对的,但是没过,不知道为啥。
class Solution {
public:
string ReverseSentence(string str) {
if(str.length()==0) return "";
int len=str.length();
int r=len-1;
string res="";
int j=len-1;
for(; j>=0; j--){
if(str[j]==' '){
res+=str.substr(j+1, r-j+1);
res+=' ';
r=j-1;
}
}
res+=str.substr(0,r+1);
return res;
}
};
剑指offer的解法
class Solution {
public:
void ReverseWord (string &str, int l, int r){
while(l < r){
swap(str[l], str[r]);
++l;
--r;
}
}
string ReverseSentence(string str) {
if(str.length()==0) return "";
auto size = str.size();
int mark=0;
str += ' ';
for(int i = 0; i < size+1; ++i){
if(str[i] == ' '){
ReverseWord(str, mark, i-1);
mark = i+1;
}
}
str = str.substr(0, size);
ReverseWord(str, 0, size-1);
return str;
}
};