牛客oj:翻轉單詞順序列牛客oj九度oj:
github**: 042-翻轉單詞順序列
csdn題解:劍指offer–042-翻轉單詞順序列
九度oj
csdn題解
github**
042-翻轉單詞順序列
1361-翻轉單詞順序列
劍指offer–042-翻轉單詞順序列
042-翻轉單詞順序列
您也可以選擇回到目錄-劍指offer–題集目錄索引
題目描述
牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,「student. a am i」。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是「i am a student.」。cat對一一的翻轉這些單詞順序可不在行,你能幫助他麼?
樣例輸入
student. a am i樣例輸出i』m a freshman and i like jobdu!
i am a student.這道題主要思想就是先翻轉所有字元,再逐個單詞翻轉jobdu! like i and freshman a i』m
然後是如何查詢到每個單詞,用指標left和right維護單詞的起始位置和結束位置
如果當前遇到乙個空格,說明發現了乙個單詞
如果找到了單詞的最後,而末尾字元不是空格,說明字串的末尾也是乙個單詞
#include
using
namespace
std;
// 除錯開關
#define __tmain main
#ifdef __tmain
#define debug cout
#else
#define debug 0 && cout
#endif // __tmain
class solution
// 首先翻轉整個句子
reverse(str, 0, str.size( ) - 1);
// 緊接著查詢到每個單詞, 然後翻轉它
int left = 0, right = 0;
while(right <= str.size( ))
right++;
}return str;
}void reverse(string &str, int left, int right)
}void reverse(string::iterator left, string::iterator right)
也可以使用stl來實現這些功能
class solution
reverse(str.begin(), str.end());
size_t left = 0;
size_t right = 0;
while(right != string::npos)
// 如果查詢不到空格, 到了字串的末尾
// 此時[degin, str.size( )]是末尾的字串
if (right == string::npos)
else
// 否則[left, end]是乙個單詞
}return str;
}};
當然由於棧是後進先出的,因此我們可以通過棧來實現翻轉
//使用兩個棧
class solution
string result;
stack
stk1;
stack
stk2;
for (auto i : str)
}while (!stk2.empty())
return result;
}};
student. a am i還有以一種思路就是從後向前,讀取到每個單詞,就開始順序的拼接它們i am a student.
class solution
};
《劍指offer》 翻轉單詞順序列
牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,student.a am i 後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是 i am a student....
劍指offer 翻轉單詞順序列
牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,student.a am i 後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是 i am a student....
劍指offer 翻轉單詞順序列
牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,student.a am i 後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是 i am a student....