剑指offer(2):替换空格

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


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

20170807150210874682688.png

  • 思路:
    1. 遍历字符串 找出空格的总数
    2. 替换后的字符串长度为:原来长度加上2*空格的数目
    3. 定义两个指针 一个从原始字符串末尾 一个从替换后字符串尾部 从后向前 如果不是空格 将指向的字符复制到替换后字符串中,两个指针向前移动一格;如果是空格,原始指针先前移动一格,替换后的指针移动三格,插入字符串‘%20’
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Created by xuehz on 2017/8/7

class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        if type(s) != str:
            return
        return s.replace(' ', '%20')

    def replaceSpace1(self, s):
        if s == None:
            return None
        if type(s) != str:
            return
        if len(s) == 0:
            return
        result = ''
        for item in s:
            if item.isspace():
                result = result + '%20'
            else:
                result = result + item
        return result

    # 书中给的思路
    def replaceSpace2(self,s):
        if not isinstance(s, str) or len(s) <= 0 or s == None:
            return ''
        spaceNum = 0
        #统计字符串中空格的总数
        for i in s:
            if i == ' ':
                spaceNum += 1

        newStrLen = len(s) + spaceNum * 2 #替换后的长度等于原来长度加上2乘以空格的数目
        newStr = newStrLen * [None] #[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None]
        indexOfOriginal, indexOfNew = len(s) - 1, newStrLen - 1
        while indexOfNew >= 0 and indexOfNew >= indexOfOriginal:
            if s[indexOfOriginal] == ' ':
                newStr[indexOfNew-2: indexOfNew+1] = ['%', '2', '0']
                indexOfNew -= 3
                indexOfOriginal -= 1
            else:
                newStr[indexOfNew] = s[indexOfOriginal]
                indexOfNew -= 1
                indexOfOriginal -= 1
        return "".join(newStr)


if __name__ == '__main__':
    s = 'we are happy'
    test = Solution()
    print test.replaceSpace(s)
    print test.replaceSpace1(s)
    print test.replaceSpace2(s)

"""
语法:isinstance(object,type)

作用:来判断一个对象是否是一个已知的类型。

其第一个参数(object)为对象,第二个参数(type)为类型名(int...)或类型名的一个列表((int,list,float)是一个列表)。
其返回值为布尔型(True or flase)。
"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值