⭐山霸和你一起学算法⭐❤️剑指 Offer 05. 替换空格❤️


前言

虽然我以后不做算法工程师,我也深知我做不了,但是一些基础的算法还是需要学以致用的,一个好的算法可以可以让公司产生巨大的收益。


一、题目

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:" We%20are%20happy."

二、解题思路

  • 思路1:这道题可以使用遍历法,从数组下标0开始进行遍历,并开辟一个新的数组,如果没有碰到空格就先就把那个数组下标的值赋值给另外一个数组,如果碰到了空格就把那个下标开始后面的三个数变成%20。

  • 时间复杂度为O(N),因为他受数组的大小影响,数组有多大就要遍历多少次,空间复杂度为: O(N),因为这种方法还需要开辟新的内存空间,不建议使用

  • 思路2
    使用双指针的思路,首先我们可以先算出空格的个数,空格数用n表示,可以算出替换后的总空间的大小,对数组进行扩容。从数组的最后面开始遍历,i 指向原字符串尾部元素, j 指向新字符串尾部元素;当 i = j 时跳出(代表左方已没有空格,无需继续遍历),下面演示一下第二种的方式

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.使用C++的方式

class Solution {
public:
    string replaceSpace(string s) {
        int count = 0, len = s.size();
        // 统计空格数量
        for (char c : s) {
            if (c == ' ') count++;
        }
        // 修改 s 长度
        s.resize(len + 2 * count);//重新分配一个内存,但是不改变之前的大小
        for(int i=len-1,j=s.size()-1;i<j;i--,j--)
        {
            if(s[i]!=' ')
            {
                s[j]=s[i];
            }
            else
            {
                s[j-2]='%';
                s[j-1]='2';
                s[j]='0';
                j-=2;
            }
        }
        // 倒序遍历修改
        return s;
    }
};

总结

慢慢来,算法小白也要变强@TOC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔动山霸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值