【剑指offer】05-替换空格

题目:

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


1、遍历整个字符串,找到空格,挨个替换

class Solution:
    # s 源字符串
    def replaceSpaceI(self, s):
        """自己写的,还用循环去挨个判断,想复杂了"""
        t = list(s)  # 字符串变列表
        n = len(t)
        for i in range(0, n):
            if t[i] == ' ':
                t[i] = "%20"
        return ''.join(t)  # 列表变字符串

遇到的问题:

  1)一开始直接用字符串s[i] = '%20',会报错。TypeError: 'str' object does not support item assignment

    是因为python不像C语言一样,可以直接对字符串中的某个字符进行操作,必须将字符串转换成列表,才可以对下标为i的字符进行操作。

    具体见下面博客:https://blog.csdn.net/u013238941/article/details/89279888

   2)写range(0, n-1),代码通过率只有25%,如果最后一个字符为空格,就不会被替换成%20.

字符串&列表相互转换的方法:

"""字符串转列表"""
str1 = "hi hello world"
print(str1.split(" "))

# 输出:['hi', 'hello', 'world']
"""列表转字符串"""
l = ["hi","hello","world"]
print(" ".join(l))

# 输出:hi hello world

殊不知,这样完全是我想复杂了啊喂!python中有内置的替换函数啊!一行就可以搞定了!

2、内置的replace函数

class Solution:
    # s 源字符串
    def replaceSpaceII(self, s):
        """其实一个内置函数replace就可以解决问题!"""
        return s.replace(' ', '%20')

replace()语法:

replace(old, new[, max])

old -- 将被替换的子字符串。
new -- 新字符串,用于替换old子字符串。
max -- 可选字符串, 替换不超过 max 次

3、将字符串以空格为基准分隔开,再将%20连接进字符串

class Solution:
    # s 源字符串
    def replaceSpaceIII(self, s):
        return '%20'.join(s.split(' '))

join()语法:

'sep'.join(seq)

sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串

split()语法:

split(str="", num=string.count(str))

str -- 分隔符,默认为所有的空字符,包括空格、换行(
)、制表符(	)等。
num -- 分割次数。默认为 -1, 即分隔所有。
原文地址:https://www.cnblogs.com/RebeccaG/p/11924724.html