文章目录
- 题目描述
- 思路
- 注意
- 代码实现
题目描述
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制:
0 <= s 的长度 <= 10000
思路
直接调用replace (划掉)
双指针,不开辟新空间,空间复杂度O(1),时间复杂度O(N)
注意
时隔许久再写双指针的时候忘记了for的一个判定条件:后指针>前指针,这个条件的本质上是当后指针与前指针相遇,意味着要处理的元素都处理完了,就可以结束处理了,不用再继续往下了,因为是原地修改(在原本的string上),因此将空格全部变成%20就好了,不用再将We再赋值一遍。可以有效提高代码的效率。
代码实现
class Solution {
public:string replaceSpace(string s) { //字符数组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;}
};