双指针
文章目錄
- 題目描述
- 思路
- 注意
- 代碼實(shí)現(xiàn)
題目描述
請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),把字符串 s 中的每個(gè)空格替換成"%20"。
示例 1:
輸入:s = “We are happy.”
輸出:“We%20are%20happy.”
限制:
0 <= s 的長(zhǎng)度 <= 10000
思路
直接調(diào)用replace (劃掉)
雙指針,不開辟新空間,空間復(fù)雜度O(1),時(shí)間復(fù)雜度O(N)
注意
時(shí)隔許久再寫雙指針的時(shí)候忘記了for的一個(gè)判定條件:后指針>前指針,這個(gè)條件的本質(zhì)上是當(dāng)后指針與前指針相遇,意味著要處理的元素都處理完了,就可以結(jié)束處理了,不用再繼續(xù)往下了,因?yàn)槭窃匦薷?#xff08;在原本的string上),因此將空格全部變成%20就好了,不用再將We再賦值一遍。可以有效提高代碼的效率。
代碼實(shí)現(xiàn)
class Solution { public:string replaceSpace(string s) { //字符數(shù)組if(s.empty()){return s;}int num = 0;int len = s.size();for(char& c : s){if(c == ' '){num++;}}s.resize(len+2*num);for(int i = len - 1, j = s.size() - 1; i >= 0 && j > i; i--){if(s[i] == ' '){s[j--] = '0';s[j--] = '2';s[j--] = '%';}else{s[j--] = s[i];}}return s;} };總結(jié)
- 上一篇: 循环斐波那契数列_第五课:斐波那契数列(
- 下一篇: keil3如何放大字体_国潮海报不会做?