剑指-面试题5 替换空格

替换空格

题目
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

思路1:
这里leetcode上C++给出的是一个string,直接使用string.replace(),考虑到一个字符串中可能有多个空格,用string.find()找空格,如果未找到,则返回string.npos。如果是char数组,可以考虑思路2。

思路2:
按照剑指提供的思路,需要考虑替换后内存的大小,先统计空格个数,再申请一个新的字符串,从后往前进行赋值。
python里也有str.replace(),似乎时间复杂度高;str.count()似乎也比较高,所以这里python使用剑指的思路实现,先把str转换成list,最后再将list转换成str,比较麻烦。

总结
C++里面string还是比char数组方便。
string.find()找不到时会返回string,npos,找到时会返回下标序号。
合并字符串或数组时,逆序可能会减少元素移动次数。

C++

class Solution {
public:
    string replaceSpace(string s) {
        string temp = "%20";
        while(s.find(' ')!=s.npos)
        {
            s = s.replace(s.find(' '), 1,temp);
        }
        return s;
    }
};

python

class Solution:
class Solution:
    def replaceSpace(self, s: str) -> str:
        if len(s)==0:
            return s
        s = list(s)
        old_length = len(s)
        i = 0
        space_num = 0
        while i!=old_length:
            if s[i]==" ":
                space_num+= 1
            i+=1
        new_length = old_length + space_num*2
        p1 = old_length-1
        p2 = new_length-1
        ss = [0]*new_length
        while (p1 >= 0) :
            if s[p1]==" ":
                ss[p2]="0"
                p2 -=1
                ss[p2]="2"
                p2-=1
                ss[p2]="%"
                p2-=1
            else:
                ss[p2] = s[p1]
                p2-=1
            p1-=1
        sss = ""
        for each in ss:
            sss+=str(each)
        return sss
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值