【剑指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 -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。 num -- 分割次数。默认为 -1, 即分隔所有。