1. 程式人生 > 實用技巧 >劍指 Offer 05:替換空格題解及注意事項

劍指 Offer 05:替換空格題解及注意事項

題目

請實現一個函式,把字串 s 中的每個空格替換成"%20"。要求:空間複雜度 O(1)

示例 1:

輸入:s = "We are happy."
輸出:"We%20are%20happy."

限制:

0 <= s 的長度 <= 10000

思路

題目要求空間複雜度為O(1),所以不能通過新建字串的形式新增,我們需要在原字串上實現原地修改:

  1. 因為要將每個" "都更改為“%20”,每替換一次字串長度增加2,設字串長度為len、總共有cnt個空格,那麼修改後的字串長度newLen = len+2*cnt
  2. 設立兩個指標,分別指向len-1,newLen-1,即舊字串和新字串的最後一個位置,倒序遍歷字串:
    1. 當s[i] != ' ' 時,令s[j]=[i]
    2. 當s[i] == ' '時:
      1. s[j] = '0'
      2. s[j-1] = '2'
      3. s[j-2] = '%'
      4. 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; } };