剑指offer | 5 替换空格 + 6 从尾到头打印链表

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]
            

结果:
在这里插入图片描述
好像更优一点!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值