剑指offer第二版刷题面试题5:替换空格(Python版本)

剑指offer第二版刷题面试题5:替换空格(Python版本)

  • 题目描述
    • 原因分析
    • 常见思路
    • 调用re模块
    • 总结

题目描述

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

原因分析

在网络编程中,URL参数中需要包含特殊字符(‘#’或者空格等),可能导致服务器端无法正确解析。需要将特殊字符转化为服务器识别的字符。

转换规则: ‘%’后加上ASCII码的两位16进制的表示;
空格的ASCII码:32;即16进制的0x20,故本题需要替换为‘%20’。

常见思路

一、分割再替换
1.首先判断字符串是否为空
2.将字符串按照“‘ ’”(空格)来分割,并调用Python中关于字符串的“.join()”。
代码:

// # -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        if not s:
            return ""
        return '%20'.join(s.split(' '))

二、replace的使用
代码:

// # -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        if not s:
            return ""
        return s.replace(' ', '%20')
        # 注意是‘ ’,不是‘’;

三、遍历
即遇到空格进行替换,但是str在Python中是不可变数据类型,可先转为list操作;
代码:

// # -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        if not s:
            return ""
        for i in range(len(s)):
            if s[i] == ' ':
                s[i] = '%20'
        return ''.join(s)     

调用re模块

在学习正则表达式的时候,除了掌握基本的匹配单、多字符等,re模块中的search、match、findall、sub都挺好用的。

代码:

// # -*- coding:utf-8 -*-
import re
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        if not s:
            return ""
        return re.sub(' ', '%20', s) 

总结

其实这些方法相比其他语言,其中几种都是借助Python本身的优势,split、re.sub等,不需要像一般的语言统计具体的空格个数再遍历,自己感觉很方便。这是自己第一篇处女博客文,写的一般,大家随意指正吧。

你可能感兴趣的:(剑指offer面试题,Python)