题目描述
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
限制:
0 <= s 的长度 <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
C++
方法1:如果不强制要求在原来的字符串替换
class Solution {
public:
string replaceSpace(string s) {
/*
创建一个新字符串
然后遍历赋值
*/
if(s.size()==0)
return s;
string res;
for(int i=0;i<s.size();i++){
if(s[i]==' '){
res+="%20";
}else{
res+=s[i];
}
}
return res;
}
};
方法2:如果要求在原来的字符上替换
替换相当于用三个字符替换现在的一个字符,所以字符串整体需要向后移动;
先统计字符串中空格字数
然后设置两个指针, 一个指向现在的尾部
另一个指向替换之后的字符串尾部
class Solution {
public:
string replaceSpace(string s) {
if(s.size()==0)
return s;
int befor_len=s.size()-1; //指针1;
int count=0; //字符串中的空格个数
for(char c : s){
if(c==' ')
count++;
}
int now_len=befor_len+count*2; //指针2
s+=string(count*2,' '); //把原字符串空间扩大
while(befor_len>=0 && now_len> befor_len){
if(s[befor_len]==' '){
s[now_len--]='0';
s[now_len--]='2';
s[now_len--]='%';
}
else{
s[now_len--]=s[befor_len];
}
befor_len--;
}
return s;
}
};
这两个方法的时间复杂度都是O(n)