劍指 Offer 05:替換空格題解及注意事項
阿新 • • 發佈:2020-10-04
題目
請實現一個函式,把字串 s 中的每個空格替換成"%20"。要求:空間複雜度 O(1)
示例 1:
輸入:s = "We are happy."
輸出:"We%20are%20happy."
限制:
0 <= s 的長度 <= 10000
思路
題目要求空間複雜度為O(1),所以不能通過新建字串的形式新增,我們需要在原字串上實現原地修改:
- 因為要將每個" "都更改為“%20”,每替換一次字串長度增加2,設字串長度為len、總共有cnt個空格,那麼修改後的字串長度newLen = len+2*cnt
- 設立兩個指標,分別指向len-1,newLen-1,即舊字串和新字串的最後一個位置,倒序遍歷字串:
- 當s[i] != ' ' 時,令s[j]=[i]
- 當s[i] == ' '時:
- s[j] = '0'
- s[j-1] = '2'
- s[j-2] = '%'
- j = j - 2 ; //額外賦了兩個值,所以向前移動兩個單元
直到 i == j(代表i之前已無空格);
C++程式碼
class Solution{ public: string replaceSpace(string s) { int len = s.size(); int cnt = 0; for (int i = 0; i < len; ++i){ if (s[i] == ' ')cnt++; } s.resize(len + 2 * cnt); for (int i = len - 1, j = s.size() - 1; i < j && i >= 0; --i, --j){ if (s[i] != ' '){ s[j] = s[i]; }else{ s[j] = '0'; s[j - 1] = '2'; s[j - 2] = '%'; j -= 2; } } return s; } };