剑指offer05-替换空格
Posted yumoz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer05-替换空格相关的知识,希望对你有一定的参考价值。
题目描述
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。(点此处,直接跳转至LeetCode原题出处)
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
解析
解法一:
使用范围for,定义,ret为一个定义的字符串,ch为从参数传来的字符串中取得的字符。判断字符是否为空格,若不为空格,只需要执行“ret += ch”,若为空格只需要执行“ret +=“%20” ”;最后返回ret的值即可。
class Solution {
public:
string replaceSpace(string s) {
string ret;
for(auto ch:s)
{
if(ch != ' ')
{
ret += ch;
}
else
{
ret += "%20";
}
}
return ret;
}
};
执行结果:
解法二:
考虑到上述解法的效率问题,由于每次“+=”都会增容,会有消耗,这里改进了一点,可以提前开好空间。
class Solution {
public:
string replaceSpace(string s) {
size_t spaceNum = 0; //统计空格
for(auto ch : s)
{
if(ch == ' ')
++spaceNum;
}
//直接计算增容,避免+=每次都增容,增容对内存的消耗,提前开空间
string ret;
ret.reserve(s.size() + spaceNum*2);//提前开空间
for(auto ch : s)
{
if(ch != ' ')
{
ret += ch;
}
else
{
ret += "%20";
}
}
return ret;
}
};
执行结果:
以上是关于剑指offer05-替换空格的主要内容,如果未能解决你的问题,请参考以下文章