代码随想录算法训练营第8天 | 344.反转字符串 + 541. 反转字符串II + 剑指Offer 05.替换空格 + 151.翻转字符串里的单词 + 剑指Offer 58-II.左旋转字符串

目录

今日任务:

344.反转字符串

list.reverse()

  双指针法:

541. 翻转字符串||

剑指Offer 05.替换空格 

​编辑 join+split

replace

151.翻转字符串里的单词

剑指Offer58-II.左旋转字符串 


今日任务:

  • 344.反转字符串
  • 541.反转字符串||
  • 剑指Offer 05.替换空格
  • 151.翻转字符串里的单词
  • 剑指Offer 58-||.左旋转字符串

344.反转字符串

题目链接:力扣-343.反转字符串

分析:

  • 可以使用库函数list.reverse()(

    如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。

    毕竟面试官一定不是考察你对库函数的熟悉程度, 如果使用python和java 的同学更需要注意这一点,因为python、java提供的库函数十分丰富。

    如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。

    建议大家平时在leetcode上练习算法的时候本着这样的原则去练习,这样才有助于我们对算法的理解。

  • 利用双指针法,pre,beh,交换双方的元素,之后进行pre += 1, beh -= 1移动

list.reverse()

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        
        return s.reverse()

  双指针法:

class Solution:
    def reverseString(self, s: List[str]) -> None:
        """
        Do not return anything, modify s in-place instead.
        """
        
        pre, beh = 0, len(s) - 1

        while pre < beh:
            s[pre], s[beh] = s[beh], s[pre]
            pre += 1
            beh -= 1

    

541. 翻转字符串||

题目链接:力扣-541.反转字符串II

分析:

  • 定义一个ans空字符串存放结果,flag用来指定是否翻转

  • 因为步长为k所以每次遍历得到的相邻字符串顺序都是不一样的,所以每次遍历都将flag取反

  • 每次遍历得到的字符串记为a,经过flag操作后添加到结果上,一次遍历就可以得到结果

class Solution:
    def reverseStr(self, s: str, k: int) -> str:
        flag = 1
        ans = ''

        for i in range(0, len(s), k):
            a = s[i: i + k]
            flag = - flag
            ans += a[::flag]

        return ans


剑指Offer 05.替换空格 

 分析:

  • 先将原来的s,根据空格进行切片,保存在s_list中
  • 创建新的结果s = ‘’
  • if 不为最后一段字符串, 则每加一段字符串+‘%20’
  • 为最后一段字符串,直接加字符串即可
class Solution:
    def replaceSpace(self, s: str) -> str:
        s_list = list(map(str, s.split(' ')))
        s = ''
        for i in range(len(s_list)):
            if i != (len(s_list) - 1):
                s += (s_list[i]+'%20')
            else:
                s += s_list[i]
        
        return s
            

join+split

class Solution:
    def replaceSpace(self, s: str) -> str:
        return ('%20').join(s.split(' '))
            

replace

class Solution:
    def replaceSpace(self, s: str) -> str:
        return s.replace(' ', '%20')
            


151.翻转字符串里的单词

题目链接:力扣-15.翻转字符串里的单词

分析:

  • 先将s切片,逆转,再转化为str时加入‘ ’

注意:split()既遇到空格就省略 ,split(‘ ’)一个空格就划分(if‘   ’,划分为[' ',' '])

class Solution:
    def reverseWords(self, s: str) -> str:
        return ' '.join(list(s.split())[::-1])


剑指Offer58-II.左旋转字符串 

题目链接:力扣-O58-II.左旋转字符串

分析:

  • 将s在k处划分为s1,s2
  • 最后return s2 + s1
class Solution:
    def reverseLeftWords(self, s: str, n: int) -> str:
        s1, s2 = s[:n], s[n:]

        return s2 + s1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值