2.替换空格

题目链接

题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

循环移动

每遇到空格就将后面的字符串向后移动2个单位,循环移动。

时间复杂度O(n2),空间复杂度O(n)。

class Solution {
public:
	void replaceSpace(char *str,int length) {
        for (int i = 0; i < length; ++i)
        {
            if (str[i] == ' ')
            {
                for (int j = length + 1; j > i + 2; j--)
                {
                    str[j] = str[j - 2];
                }
                str[i] = '%';
                str[i + 1] = '2';
                str[i + 2] = '0';
                length += 2;
            }
        }
	}
};

记录索引填值

先遍历一遍记录空格的个数,然后计算扩容后的尾部索引,设置原字符串尾部索引。从后往前添加值

  • 如果是空格,往前添加%20
  • 赋值原字符串相应位置字符

时间复杂度O(n),空间复杂度O(n)。

class Solution {
public:
	void replaceSpace(char *str,int length) {
        int cnt = 0;
        for (int i = 0; i < length; ++i)
        {
            if (str[i] == ' ')
            {
                cnt++;
            }
        }
        int oldIdx = length;
        int newIdx = length + 2 * cnt;
    		// 从最后一个字符'\n'开始
        while (newIdx >= 0 && oldIdx >= 0)
        {
            if (str[oldIdx] == ' ')
            {
                str[newIdx--] = '0';
                str[newIdx--] = '2';
                str[newIdx--] = '%';
            }
            else 
            {
                str[newIdx--] = str[oldIdx];
            }
            oldIdx--;
        }
		}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值