题目描述
思路
初见这道题,第一眼想得到就是:遍历字符串将空格替换成字符串就完了。 后面仔细想了发现:要替换的字符串长度要大于原本的空格位置的长度,而字符串又是以数组的形式存在的。 所以需要对数组进行对应长度的resize()
那么如何来计算需要resize() 的长度呢? 通过遍历初始字符串,统计空格的数量,之后利用s.resize(oldsize+countNull*2) 就可以了。
拓展(字符串和字符数组的区别)
在字符数组中: 在计算机中存储方式为:
而在string 中,没有'\0' 这一停止符,提供一个s.size() 接口用来判断边界。
而vector<char> 和string 有什么区别呢? 其实没有很大的区别,只是string 有更多的字符串操作接口,一般操作字符串时还是将其定义为string 。
代码实现
class Solution {
public:
string replaceSpace(string s)
{
int oldsize=s.size();
int CountNull=0;
for(int i=0;i<s.size();i++)
{
if(s[i]==' ')
{
CountNull++;
}
}
s.resize(oldsize+CountNull*2);
int newsize=s.size();
for(int i=oldsize-1,j=newsize-1;i<j;i--,j--)
{
if(s[i]!=' ')
{
s[j]=s[i];
}
else
{
s[j]='0';
s[j-1]='2';
s[j-2]='%';
j=j-2;
}
}
return s;
}
};
|