剑指Offer 2. 替换空格 (字符串)

Posted on 2018-10-11 22:13  _hqc  阅读(179)  评论(0编辑  收藏  举报

题目描述

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

题目地址

https://www.nowcoder.com/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&tqId=11155&tPage=1&rp=2&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking

思路1:开辟一个新的字符串,遍历给定字符串,当字符为空格时,在新字符串后添加%20,否则,添加原字符

思路2:将字符串转换成列表,遍历字符串,当字符为空格时,依次在列表后面添加'%','2','0';否则,添加原字符

思路3:如果直接每次遇到空格添加'%20',那么空格后面的数字就需要频繁向后移动。遇到这种移动问题,我们可以尝试先给出最终需要的长度,然后从后向前扫描,同时给定两个指针来保证定位。

Python

# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        if len(s) == 0:
            return ''
        # 思路1
        # newString = ''
        # for i in s:
        #     if i == ' ':
        #         newString += '%20'
        #     else:
        #         newString += i
        # return newString
        # 思路2:
        # lis = list(s)
        # newLis = []
        # for i in lis:
        #     if i == ' ':
        #         newLis.append('%')
        #         newLis.append('2')
        #         newLis.append('0')
        #     else:
        #         newLis.append(i)
        # return "".join(newLis)
        # 思路3 
        count = 0
        for i in s:
            if i == ' ':
                count += 1
        newLen = len(s) + count * 2
        newStr = newLen * [None]
        indexOfNew, indexOfOri = len(newStr)-1, len(s)-1
        while indexOfNew >= 0 and indexOfNew >= indexOfOri:
            if s[indexOfOri] == ' ':
                newStr[indexOfNew-2:indexOfNew+1] = ['%','2','0']
                indexOfNew -= 3
                indexOfOri -= 1
            else:
                newStr[indexOfNew] = s[indexOfOri]
                indexOfNew -= 1
                indexOfOri -= 1
        return "".join(newStr)

if __name__ == '__main__':
    result = Solution().replaceSpace('We are happy.')
    print(result)