【剑指Offer】面试题5 替换空格
作者:互联网
题目:
代码:
c++ STL 方法 时间复杂度高
class Solution {
public:
string replaceSpace(string s) {
int pos = s.find(' ');
while(pos != -1)
{
s.erase(pos,1);
s.insert(pos,"%20");
pos = s.find(' ');
}
return s;
}
};
代码片段2:
class Solution {
public:
string replaceSpace(string s) {
int Oldlength = s.size();
int num = 0;
int i = 0;
while(s[i] != '\0')
{
if (s[i] == ' ')
num ++;
i++;
}
int Newlength = Oldlength + 2*num;
s.resize(Newlength);
int Oldindex = Oldlength;
int Newindex = Newlength;
while(Oldindex >= 0 && Oldindex < Newindex)
{
if(s[Oldindex] == ' ')
{
s[Newindex--] = '0';
s[Newindex--] = '2';
s[Newindex--] = '%';
}
else
{
s[Newindex--] = s[Oldindex];
}
Oldindex--;
}
return s;
}
};
思想:从前往后填写,在字符串移动过程中 部分子串涉及多次移动,时间复杂度为O(n),而从后往前不存在此问题 为O(n)。
代码片段3:
class Solution {
public:
string replaceSpace(string s) { //字符数组
string array; //存储结果
for(auto &c : s){ //遍历原字符串
if(c == ' '){
array += "%20";
}
else{
array += c;
}
}
return array;
}
};
标签:Oldindex,面试题,string,Offer,int,pos,空格,--,Newindex 来源: https://blog.csdn.net/weixin_42940990/article/details/113853970