LeetCode151. 翻轉字串裡的單詞
阿新 • • 發佈:2020-07-30
題意是要把原字串中所有的單詞劃分出來,倒序用一個空格的間隙來連線字串,我們只需要劃分出所有的單詞,然後把它們連線起來,每兩個單詞之間放一個空格就好了。
分割空格之間的單詞,很容易想到用雙指標進行分割,只需要找到每個單詞的第一個字母(也就是第一個不為空格的字母),然後左指標指向這個單詞,右指標不斷右移直到碰到指向一個空格或者字串的末尾。
我們額外開一個字串陣列words存放所有劃分出來的單詞,把每一個劃分出來的單詞都存在這個數組裡,分割出所有的單詞之後,翻轉一下這個陣列,然後把所有單詞連線起來(每兩個單詞之間用一個空格分割),就OK啦。
程式碼如下:
class Solution { public: string reverseWords(string s) { if(s.size() == 0) { return ""; } vector<string> words; //存放所有劃分出來的單詞 for(int i = 0; i < s.size(); ++i) { while(s[i] == ' ' && i < s.size()) { //尋找每個字串的第一個字母(第一個不為空格的字元) ++i; } if(i == s.size()) { //如果左指標i已經到了字串末尾的下一個位置,說明後面莫得單詞了,退出迴圈 break; } int j = i; //j是右指標 while(s[j] != ' ' && j < s.size()) { //j指向當前單詞的下一個位置(下一個空格或者字串末尾的下一個位置) ++j; } string temp = s.substr(i, j - i); //分割出當前的單詞 words.push_back(temp); i = j - 1; //因為迴圈結束後有一個++i,所以這裡將i賦值為j - 1, 這樣迴圈結束後i就是j現在的位置了,可以繼續往後尋找單詞 } reverse(words.begin(), words.end()); //題目要求翻轉單詞 string res; for(int i = 0; i < words.size(); ++i) { res += words[i]; //將所有單詞連線起來 if(i < words.size() - 1) { //每兩個單詞之間有一個空格 res += ' '; } } return res; } };