剑指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)。
"""
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 题目 将字符串中的每个空格都替换为“%20” 虽然我的代码不是这么写的,但是还是来记录下这个题的算法思路:We a...
    clshinem阅读 278评论 1 1
  • 题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替...
    云胡同学阅读 449评论 0 0
  • 题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换...
    vaneL阅读 354评论 0 0
  • 说明: 本文中出现的所有算法题皆来自牛客网-剑指Offer在线编程题,在此只是作为转载和记录,用于本人学习使用,不...
    秋意思寒阅读 1,222评论 1 1
  • 违千夫之诺诺,作一士之谔谔
    思莫阅读 591评论 0 0

友情链接更多精彩内容