LKJZ05-替换空格
https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/
1.遍历添加
时间复杂度N
空间复杂度N-开辟了额外辅助字符串str
class Solution {
public:
string replaceSpace(string s) {
string str;
for(auto&ch:s){
if(ch==' '){
str+="%20";
}else{
str+=ch;
}
}
return str;
}
};
2.原地修改
时间复杂度N
空间复杂度1
解题思路
遍历字符串,统计空格个数count,为s重新开空间s.resize(length+count*2);
开始替换
for循环控制i,j两个变量,i指向原字符串尾部元素,j指向新字符串尾部元素;当i=j说明已经没有空格跳出循环;
如果s[i]!='',s[j]=s[i];
如果s[i]=='',替换%20依次对应s[j-2],s[j-1],s[j];
class Solution {
public:
string replaceSpace(string s) {
//统计空格个数
int count=0;
for(auto&ch:s){
if(ch==' '){
count++;
}
}
//s.resize
int length=s.size();
s.resize(length+2*count);
//开始替换
//i指向原字符串尾部元素,j指向新字符串尾部元素
//当i=j时跳出循环,表示已经没有空格
for(int i=length-1,j=s.size()-1;i<j;i--,j--){
if(s[i]!=' '){
s[j]=s[i];
}else{
//%20
s[j-2]='%';
s[j-1]='2';
s[j]='0';
//如果发生替换,j总共要减3,循环内部减2,因为for迭代条件有j--;
j-=2;
}
}
return s;
}
};