代码随想录算法训练营第九天|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 字符串内部的操作
思路
- 先对字符串首尾空格进行删除的操作
- 翻转整个字符串
- 将翻转后的字符串用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的思想下一次在写吧