替换空格+从尾到头打印链表
1 题目1-替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
2 思路及解答
思路1:根据空格进行split 然后一个for循环实现字符串拼接,注意最后一个单独拿出来
代码:
# -*- coding:utf-8 -*-
class Solution:
# s 源字符串
def replaceSpace(self, s):
# write code here
# 思路:根据空格进行split 然后再拼接每个字符段 中间都加上“%20”
s_list = s.split(' ')
ss = ''
n = len(s_list)-1
for i in range(n):
ss = ss + s_list[i] + '%20'
ss = ss + s_list[n]
return ss
结果:
思路2:能否在split之后,用join函数?可以的 代码更加简洁 时间更快 O(1)复杂度 而不是O(n)
代码:
# -*- coding:utf-8 -*-
class Solution:
# s 源字符串
def replaceSpace(self, s):
# write code here
# 思路:根据空格进行split 然后再拼接每个字符段 中间都加上“%20”
s_list = s.split(' ')
ss = '%20'.join(s_list)
return ss
结果:
思路3:还有一个更牛逼的思路:直接将空格用replace函数替换成“%20”。。。人才啊
代码:
# -*- coding:utf-8 -*-
class Solution:
# s 源字符串
def replaceSpace(self, s):
# write code here
return s.replace(' ', '%20')
结果:
3 题目2-从尾到头打印链表
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。即将链表元素转过来
4 思路及解答2
思路1:从头打印到尾部 很容易 定个游标 一直移动就好 怎么反过来打印呢?还是正常的循环遍历,但是每次元素用insert在空list的头部添加
代码:
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
# 思路:从头打印到尾部 很容易 定个游标 一直移动就好 怎么反过来打印呢?list的头部添加 用insert
s = []
cur = listNode
while cur != None:
s.insert(0, cur.val)
cur = cur.next
return s
结果:
思路2:在思路1上做优化,不要insert,减小复杂度使用append,最后list形成之后再反转,使用取数!
代码:
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
# write code here
# 思路:从头打印到尾部 很容易 定个游标 一直移动就好 怎么反过来打印呢?list的头部添加 用insert
s = []
cur = listNode
while cur != None:
s.append(cur.val)
cur = cur.next
return s[::-1]
结果:
好像更优一点!