Mac 下 MAMP Pro 開啟 PHP Redis 擴充套件
阿新 • • 發佈:2021-07-14
在部分程式語言中,我們可以動態地將原陣列長度擴大,此時我們就可以使用雙指標演算法,來降低空間的使用:
- 首先遍歷一遍原陣列,求出最終答案的長度length;
- 將原陣列resize成length大小;
- 使用兩個指標,指標i指向原字串的末尾,指標j指向length的位置;
- 兩個指標分別從後往前遍歷,如果str[i] == ' ',則指標j的位置上依次填充'0', '2', '%',這樣倒著看就是"%20";如果str[i] != ' ',則指標j的位置上填充該字元即可。
由於i之前的字串,在變換之後,長度一定不小於原字串,所以遍歷過程中一定有i <= j,這樣可以保證str[j]不會覆蓋還未遍歷過的str[i],從而答案是正確的。
class Solution { public: string replaceSpace(string s) { int len = 0; for(char &c : s) if(c == ' ') len += 3; else len++; int i = s.size(), j = len; s.resize(len); while(i >= 0) { if(s[i] == ' ') { s[j--] = '0'; s[j--] = '2'; s[j--] = '%'; } else s[j--] = s[i]; i--; } return s; } };