面试题5:替换空格
题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路:遍历替换的时间复杂度为 O ( n 2 ) O(n^2) O(n2),所以简单的遍历肯定是行不通的。在python的解法中有两种,一种是直接使用 r e p l a c e ( ) replace() replace()但是要注意,这个不能直接修改原数组,所以要写另一个变量来引用。另一种解法是用正则表达式,我不是很熟悉,但是后者的运行时间比前者要来得短,本着越短越好的原则,我们用后一种方法。
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。
解题思路:可以额外使用一个栈来实现,先入后出。
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中,返回即可。