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 字符串内部的操作
思路
-
先对字符串首尾空格进行删除的操作
-
翻转整个字符串
-
将翻转后的字符串用split分割
-
对分割后的字符串在进行翻转
-
用
join
函数进行连接
细节:
-
删除字符串中的首尾空格是
str.strip()
-
将字符串分割为列表是
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 拆分+翻转
思路
-
先将字符串拆分成列表
-
对列表内的元素进行翻转
-
使用
join
函数对其进行连接
class Solution: def reverseWords(self, s: str) -> str: s= s.split() s= s[::-1] return ' '.join(s)
1.3 本题小结
-
python中字符串类型是不可变类型,所以必须要转换成列表再进行后面的操作
-
学会了两个函数
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 本题小结
-
这道题开始没思路,后来看了别人的方法,默默说了一句,我好傻呀,这题我都不会做
-
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.本章小结
-
这一块的题目整体而言比较简单,但是就是思考起来,切片掌握的真的不是很好,总是不知道如何切片,日常使用过程中也是经常使用索引,所以这个知识点给忘了
-
split
函数是将字符串转换成列表的 -
strip
函数是将字符串的首尾空格去掉的 -
学习一下KMP,发现这个题目也可以另辟蹊径做出来,KMP的思想下一次在写吧