更弱智的算法学习 day9

字符串part02

● 151.翻转字符串里的单词

● 28. 实现 strStr()

● 459.重复的子字符串

● 字符串总结

● 双指针回顾

今日任务

151.翻转字符串里的单词

第一次写逻辑比较混乱,尤其难以处理第一个单词,重新整理一下逻辑:

当然是想找到两个指针fast和slow,让他们囊括住一个单词,然后给一个新的列表加上去。让fast指针从末端开始走,遇到空格就先掠过,直到来到一个单词末尾,注意保持该指针大于等于0,防止走出去了。

找到单词末尾并留下一个slow在原地,然后继续向前直到来到空格,此时[fast+1: slow+1]也即找到一个单词,加到列表中。最后把整个列表按照空格链接成字符串。避免了对于第一个单词的讨论。

python 复制代码
class Solution:
    def reverseWords(self, s: str) -> str:
        new_s = []

        length = len(s)-1
        fast = length
        while fast>=0:
            while fast>=0 and s[fast] == ' ':
                fast -= 1
            if fast < 0:
                break

            slow = fast
            while fast>=0 and s[fast] != ' ':
                fast -= 1
            word = s[fast+1: slow+1]
            new_s.append(word)

        return ' '.join(new_s)
        

使用 .split 方法比较容易

語法

复制代码
str.split(sep=None, maxsplit=-1)
  • sep:分隔符號,預設為 None(空白字元)
  • maxsplit:最大分割次數,-1 表示無限制

使用空白分割(預設)

當不指定分隔符號時,會以任意空白字元分割,並自動忽略多餘的空白:

复制代码
text = "Hello   World   Python"
result = text.split()
print(result)  # ['Hello', 'World', 'Python']

# 包含換行和 Tab
text = "Hello\nWorld\tPython"
result = text.split()
print(result)  # ['Hello', 'World', 'Python']

使用split可以自动去空白,把所有的单词存储到列表里,交换头和尾的单词即可

python 复制代码
class Solution:
    def reverseWords(self, s: str) -> str:
        new_s = list(s.split())
        left = 0
        right = len(new_s)-1
        while left <= right:
            new_s[left], new_s[right] = new_s[right], new_s[left]
            left += 1
            right -= 1
        return ' '.join(new_s)

右旋字符串

知道python的好了,无敌了,使用列表和库函数狠狠操作字符串

python 复制代码
k = int(input())
s = input()

new_s = ''
spin1 = s[0: len(s)-k]
spin2 = s[len(s)-k: len(s)]

new_s = str(spin2)+str(spin1)
print(new_s)

28. 实现 strStr()

感觉使用python时大脑皮层的褶皱都抚平了,没有烧脑的勾心斗角,没有复杂的边界判断。只有清晰的字符串切片和舒适的函数调用。

python 复制代码
class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        n_length = len(needle)

        left = 0
        right = 0+n_length

        while right<= len(haystack):
            if str(haystack[left:right]) == needle:
                return left
            else:
                left += 1
                right += 1
        return -1

当然,很重要的方法还是要学习的。

459.重复的子字符串

天才

python 复制代码
class Solution:
    def repeatedSubstringPattern(self, s: str) -> bool:
        return s in (s+s)[1:-1]

琐事缠身啊,kmp算法等待更新,以及这两个题目

相关推荐
努力学算法的蒟蒻7 小时前
day63(1.22)——leetcode面试经典150
算法·leetcode·面试
jrlong7 小时前
DataWhale大模型基础与量化微调task4学习笔记(第 1章:参数高效微调_PEFT技术综述)
笔记·学习
invicinble7 小时前
对于后端要和linux打交道要掌握的点
linux·运维·python
leiming67 小时前
linux 进程学习之信号
linux·运维·学习
喵手7 小时前
Python爬虫零基础入门【第三章:Requests 静态爬取入门·第4节】列表页→详情页:两段式采集(90%项目都这样)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·requests静态爬取·两段式采集
zzZ··*7 小时前
自动登录上海大学校园
python·网络协议·selenium
weisian1517 小时前
进阶篇-4-数学篇-3--深度解析AI中的向量概念:从生活到代码,一文吃透核心逻辑
人工智能·python·生活·向量
写代码的【黑咖啡】7 小时前
Python中的Msgpack:高效二进制序列化库
开发语言·python
MistaCloud8 小时前
Pytorch进阶训练技巧(二)之梯度层面的优化策略
人工智能·pytorch·python·深度学习
永远都不秃头的程序员(互关)8 小时前
【决策树深度探索(一)】从零搭建:机器学习的“智慧之树”——决策树分类算法!
算法·决策树·机器学习