代码随想录算法训练营第九天|leetcode151.翻转字符串里的单词、卡码网55.右旋字符串、leetcode28.找出字符串中第一个匹配项的下标、leetcode459. 重复的子字符串

1 leetcode151.翻转字符串里的单词

题目链接:151. 反转字符串中的单词 - 力扣(LeetCode)

文章链接:代码随想录

视频链接:字符串复杂操作拿捏了! | LeetCode:151.翻转字符串里的单词_哔哩哔哩_bilibili

自己的思路:直接将空格去掉,然后分割字符串为列表,在列表中进行翻转,不在字符串内部操作,因为字符串不可以操作

1.1 自己的代码

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

1.2 视频后的学习

1.2.1 字符串内部的操作

思路

  1. 先对字符串首尾空格进行删除的操作
  2. 翻转整个字符串
  3. 将翻转后的字符串用split分割
  4. 对分割后的字符串在进行翻转
  5. join函数进行连接

细节

  1. 删除字符串中的首尾空格是str.strip()
  2. 将字符串分割为列表是str.split()
class Solution:
    def reverseWords(self, s: str) -> str:
        s= s.strip()
        s = s[::-1]
        word = ' '.join(words[::-1] for words in s.split())
        return word
1.2.2 拆分+翻转

思路

  1. 先将字符串拆分成列表
  2. 对列表内的元素进行翻转
  3. 使用join函数对其进行连接
class Solution:
    def reverseWords(self, s: str) -> str:
        s= s.split()
        s= s[::-1]
        return ' '.join(s)

1.3 本题小结

  1. python中字符串类型是不可变类型,所以必须要转换成列表再进行后面的操作
  2. 学会了两个函数split()将字符串拆分成数组;strip()函数是将字符串头尾的空格删除

2. 卡码网55.右旋字符串

题目链接:55. 右旋字符串(第八期模拟笔试)

文章链接:右旋字符串 | 代码随想录

自己的思路:开始真的有些不知所措,看了别人的方法觉得自己真的有点傻,,,

2.1文章学习思路

2.1.1 直接切片翻转
k = int(input())
s = input()
print(s[-k:]+s[:-k])
2.1.2 切片位置变化
k = int(input())
s = input()
print(s[len(s)-k:]+s[:len(s)-k])

2.2 本题小结

  1. 这道题开始没思路,后来看了别人的方法,默默说了一句,我好傻呀,这题我都不会做
  2. python中我对切片掌握的真的还没那么好,所以要记住字符串不能换位置但是可以切片

3 leetcode28.找出字符串中第一个匹配项的下标

题目链接:28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode)

文章链接:代码随想录

3.1 暴力搜索

针对KMP算法,还没学会,先用简单方法做一下

class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        n = len(needle)
        i = 0
        for i in range(len(haystack)):
            if haystack[i:i+n] == needle:
                return i
        return -1

4 leetcode459. 重复的子字符串

题目链接:459. 重复的子字符串 - 力扣(LeetCode)

文章链接:代码随想录

4.1 文章后的思路

发现这种题真的就是考察思路,我自己写的时候就是不知道咋办,后来看别人画的图以后,我就明白了,就是将两个字符串拼接,如果是重复的,那么破坏了本身结构后依然可以找到这个字符串

class Solution:
    def repeatedSubstringPattern(self, s: str) -> bool:
        new_s = s+s
        if s in new_s[1:len(new_s)-1]:
            return True
        return False

5.本章小结

  1. 这一块的题目整体而言比较简单,但是就是思考起来,切片掌握的真的不是很好,总是不知道如何切片,日常使用过程中也是经常使用索引,所以这个知识点给忘了
  2. split函数是将字符串转换成列表的
  3. strip函数是将字符串的首尾空格去掉的
  4. 学习一下KMP,发现这个题目也可以另辟蹊径做出来,KMP的思想下一次在写吧
posted @ 2024-10-24 12:33  小方呀0524  阅读(3)  评论(0编辑  收藏  举报