LeetCode剑指Offer05.替换空格
题目:
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
题解:
1.常规方法
先遍历一遍数组,记录空格的个数count,再扩展字符数组长度为(s.size()+2*count),用双指针从后往前替换空格,一个指针指向扩展前的最后一位,一个指针指向扩展后的最后一位。
class Solution {
public:
string replaceSpace(string s) {
int sOldsize=s.size();
int count=0;
for(int i=0;i<sOldsize;i++){
if(s[i]==' '){
count++;
}
}
s.resize(sOldsize+count*2);
int sNewsize=s.size();
for(int i=sNewsize-1,j=sOldsize-1;i!=j;i--,j--){
if(s[j]!=' '){
s[i]=s[j];
}else{
s[i]='0';
s[i-1]='2';
s[i-2]='%';
i--;
i--;
}
}
return s;
}
};
时间复杂度 O(n),空间复杂度O(1)
好处:
(1)不用申请新的数组
(2)从后向前相比于从前向后可避免替换时移动后面所有的元素。
2.开辟新的字符数组,利用string的方法完成。
不太好