leetcode——反轉字串中的單詞
阿新 • • 發佈:2021-01-30
題目:
給定一個字串,你需要反轉字串中每個單詞的字元順序,同時仍保留空格和單詞的初始順序。
示例:
輸入:"Let's take LeetCode contest"
輸出:"s'teL ekat edoCteeL tsetnoc"
提示:在字串中,每個單詞由單個空格分隔,並且字串中不會有任何額外的空格
方案一:原地解法,分組旋轉字串, 可以接受多個連續空格
class Solution { private: void reverseString(string& s, int begin, int end) { for (int i = begin, j = end; i < j; i++, j--) { swap(s[i], s[j]); } } public: string reverseWords(string s) { int begin = -1, len = s.size(); for (int i = 0; i < len; i++){ if (s[i] == ' ' && begin >= 0) { reverseString(s, begin, i - 1); begin = -1; } else if (s[i] != 0 && begin < 0){ begin = i; } } if (begin >= 0) { reverseString(s, begin, len - 1); } return s; } };
時間複雜度
空間複雜度
方案二:額外空間反轉
class Solution { public: string reverseWords(string s) { int i = 0, len = s.size(); string res; while(i < len) { int start = i; while(i < len && s[i] != ' ') { i++; continue; } int end = i - 1; while(start <= end) { res.push_back(s[end--]); } while(i < len && s[i] == ' ') { res.push_back(s[i]); i++; continue; } } return res; } };
時間複雜度
空間複雜度