剑指Offer-Python-牛客网

面试题5:替换空格

2019-01-02  本文已影响0人  凌霄文强

题目描述

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

知识点

字符串


Qiang的思路V1

一看这个问题,“替换”,瞬间想到replace,简单粗暴有没有。

# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        return s.replace(' ','%20')

效果是杠杠滴,简单粗暴,但是不提倡啊。这样写代码就没什么意思了。


Qiang的思路V2

因为和C/C++不一样,不能向操作数组一样对python中的字符串进行操作,但是为了仿照C/C++的方式,尽量从原理出发实现该功能,所以使用了字符串拼接的功能,这就类似C/C++中的往字符型数组最后面添加元素,当然前提是开辟的空间足够。

# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        ss=''
        for c in s:
            if c==' ':
                ss=ss+'%20'
            else:
                ss=ss+c
        return ss

Book中思路

书上的思路挺棒的,奈何能力有限,没办法用python写出同样的代码。所以特地用C/C++实现了一下。

首先通过一次遍历找到所有的空格,记录总共出现的次数,这样就能得到转换之后的数组长度了。

然后根据此长度找到转换之后字符串最后的位置。

最后倒着开始复制,当出现空格的时候进行替换即可。

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

另外,在我写的python代码中并不是在原来的串上进行修改的,但是书中是在原来的串上进行修改的。

作者原创,如需转载及其他问题请邮箱联系:lwqiang_chn@163.com
个人网站:https://www.myqiang.top

上一篇 下一篇

猜你喜欢

热点阅读