剑指刷题3

面试题5:替换空格

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

解题思路:遍历替换的时间复杂度为$O(n^2)$,所以简单的遍历肯定是行不通的。在python的解法中有两种,一种是直接使用$replace()$但是要注意,这个不能直接修改原数组,所以要写另一个变量来引用。另一种解法是用正则表达式,我不是很熟悉,但是后者的运行时间比前者要来得短,本着越短越好的原则,我们用后一种方法。

-*- coding:utf-8 -*-
1
2
3
4
5
6
7
8
class Solution:
# s 源字符串
def replaceSpace(self, s):
# write code here
import re
ret = re.compile(' ')
k = ret.sub('%20', s)
return k

算法思路:就两步,一个是compile,另一个是sub。暂时没理解是啥意思。

面试题6:从尾到头打印链表

题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

解题思路:可以额外使用一个栈来实现,先入后出。

-*- coding:utf-8 -*-
1
2
3
4
5
6
7
8
9
10
11
12
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
out = []
re_out = []
while listNode != None:
out.append(listNode.val)
listNode = listNode.next
while out :
re_out.append(out.pop())
return re_out

算法思路:这里不用考虑额外情况,当空时,输出自然为空。所以直接先将链表装入链中,然后再把链pop出来,导入re_out中,返回即可。

请作者喝杯咖啡吧!