题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
请实现一个函数,将一个字符串中的空格替换成“%20”。
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
- 思路:
- 遍历字符串 找出空格的总数
- 替换后的字符串长度为:原来长度加上2*空格的数目
- 定义两个指针 一个从原始字符串末尾 一个从替换后字符串尾部 从后向前 如果不是空格 将指向的字符复制到替换后字符串中,两个指针向前移动一格;如果是空格,原始指针先前移动一格,替换后的指针移动三格,插入字符串‘%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)。
"""