剑指Offer-Python-替换空格

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34364995/article/details/81100193

题目:

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

思路:
因为在Python中字符串不可变,于是定义了一个新的res来存储替换后的字符串,依次遍历字符串,若遇到空格则res += ‘%20’,否则res += ‘i’(i为当前遍历值)。时间复杂度为O(n),空间复杂度为O(n)。
代码

class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        res = ''
        for i in s:
            if i == ' ':
                res += '%20'
            else:
                res += i
        return res

通用解法(C/C++/JAVA)
思路:
在Python中相当于把目标字符串存在列表中,然后依次遍历,当遇到空格时,将其替换为’%20’三个字符,因此后续元素需要做移位操作。这种方法遍历所花费的时间复杂度为O(n^2)。因此本书作者提出了从后往前的遍历方法。
具体思路:
1)计算字符串中有多少个空格,每一个空格需要多增加两个空间。比如字符串’we are happy.’在python中长度为13,替换后的长度为17。(在C语言中包含字符串结尾符合’\0’,所以在C语言中为字符串长度为14)
2)定义两个指针p1,p2,p1指向原始字符串的末尾,p2指向替换之后的字符串的末尾.接下来向前移动p1,逐个把它指向的字符复制到p2的位置,同时p2前移。当p1遇到空格时,p2前移三格插入’%20’。
3)当p1、p2指向同一位置时,说明所有空格已经被替换。
如图所示:

代码

    def replaceSpace(self, s):
        # write code here
        # second solution
        p1 = len(s) - 1
        res = list(s)
        n = s.count(' ')
        res += [0] * n * 2
        p2 = len(res) - 1
        while p1 != p2:
            if res[p1] == ' ':
                res[p2] = '0'
                res[p2 - 1] = '2'
                res[p2 - 2] = '%'
                p2 -= 3
            else:
                res[p2] = res[p1]
                p2 -= 1
            p1 -= 1
        return ''.join(res)
展开阅读全文

没有更多推荐了,返回首页