翻轉單詞順序列
阿新 • • 發佈:2017-08-23
div 內容 數組越界 找單詞 單詞 item n-1 word student
段錯誤:您的程序發生段錯誤,可能是數組越界,堆棧溢出(比如,遞歸調用層數太多)等情況引起 原來是部分程序寫錯。
題目描述
牛客最近來了一個新員工Fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識到,這家夥原來把句子單詞的順序翻轉了,正確的句子應該是“I am a student.”。Cat對一一的翻轉這些單詞順序可不在行,你能幫助他麽?
class Solution { public: //void swap() void Reversesub(string &str,int a,int b){ while(a<b) swap(str[a++],str[b++]); } string ReverseSentence(string str) { int n=str.size(); Reversesub(str,0,n); int i=0; int a=0,b=0; while(i<n) { while(i<n && str[i]==‘ ‘) i++; a=b=i; while(i<n && str[i]!=‘ ‘) { i++; b++; } Reversesub(str,a,b-1); } return str; } };
不通過 您的代碼已保存
段錯誤:您的程序發生段錯誤,可能是數組越界,堆棧溢出(比如,遞歸調用層數太多)等情況引起 原來是部分程序寫錯。
class Solution { public: //void swap() void Reversesub(string &str,int a,int b){ while(a<b) swap(str[a++],str[b--]); } string ReverseSentence(string str) { int n=str.size(); Reversesub(str,0,n-1); int i=0; int a=0,b=0; while(i<n) { while(i<n && str[i]==‘ ‘) i++; a=b=i; while(i<n && str[i]!=‘ ‘) { i++; b++; } Reversesub(str,a,b-1); } return str; } };
class Solution { public: void ReverseWord(string &str, int s, int e) { while(s < e) swap(str[s++], str[e--]); } string ReverseSentence(string str) { ReverseWord(str, 0, str.size() - 1); //先整體翻轉 int s = 0, e = 0; int i = 0; while(i < str.size()) { while(i < str.size() && str[i] == ‘ ‘) //空格跳過 i++; e = s = i; //記錄單詞的第一個字符的位置 while(i < str.size() && str[i] != ‘ ‘) //不是空格 找單詞最後一個字符的位置 { i++; e++; } ReverseWord(str, s, e - 1); //局部翻轉 } return str; } };
翻轉單詞順序列