整理自劍指Offer
一:題目描述
牛客最近來了一個新員工Fish,每天早晨總是會拿着一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是“I am a student.”。Cat對一一的翻轉這些單詞順序可不在行,你能幫助他麼?
二:解題思路
第一步:翻轉句子中所有字符
如“I am a student.” --->".tneduts a ma I"
此時不但翻轉了句子中單詞的順序,連單詞內的字符的順序也被翻轉了
第二步:再翻轉句子中每一個字符的順序,就得到了“student. a am I”
三:代碼實現
class Solution {
public:
//轉換字符串的一段
void Reverse(string &str,int start,int end){
while(start<end){
char temp=str[start];
str[start]=str[end];
str[end]=temp;
start++;
end--;
}
}
string ReverseSentence(string str) {
//邊界條件
if(str.empty())
return str;
//翻轉整個字符串
Reverse(str,0,str.size()-1);
int i; //記錄遍歷到字符串的位置
int start=0; //單詞的開始位置
int end =0; //單詞的結束位置
for(i=0;i<str.size();i++){
//跳過空格,空格可能不止一個
while(i<str.size() && str[i]==' ')
i++;
start=i; //記錄單詞的第一個位置
end=i;
//尋找單詞最後一個位置
while(i<str.size() && str[i]!=' ')
i++;
end=i-1;
//翻轉單詞
Reverse(str,start,end);
}
return str;
}
};