28. 实现 strStr()
背景:给两字符串,求第2个字符串在第一个字符串中第一个匹配的下标,不存在则返回-1
思路:
- 匹配串的长度已知,则使用滑动窗口法,去验证两串是否匹配,一旦匹配返回对用坐标
- KPM是啥?
KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。next数组记录前缀表?so hard,先放弃为敬
实践:
复盘:
459.重复的子字符串
背景:给定一个非空的字符串 s
,检查是否可以通过由它的一个子串重复多次构成。
思路:重复1次不行,所以字符串长度为1排出,怎么证明重复多次,并且重复多次能构成s呢?依次遍历判断是几位数,记录几位数为N,直接判断当前子串的长度*重复倍数==s,则有戏
实践:
复盘:
看题解百花齐放:
return True if re.fullmatch(r'([a-z]+)\1+',s) else False
字符串总结
结合python来说:
-
len()
: 返回字符串的长度。 -
strip()
: 去除字符串两端的空白字符。 -
lstrip()
: 去除字符串左侧的空白字符。 -
rstrip()
: 去除字符串右侧的空白字符。 -
split()
: 根据指定的分隔符将字符串拆分成子串列表。 -
join()
: 使用指定的分隔符将列表中的元素连接成一个字符串。 -
replace()
: 替换字符串中的子串。 -
upper()
: 将字符串中的所有字符转换为大写。 -
lower()
: 将字符串中的所有字符转换为小写。 -
capitalize()
: 将字符串的首字母转换为大写,其余字母转换为小写。 -
title()
: 将字符串中的每个单词的首字母转换为大写,其余字母转换为小写。 -
startswith()
: 检查字符串是否以指定的前缀开始。 -
endswith()
: 检查字符串是否以指定的后缀结束。 -
find()
: 在字符串中查找子串的位置(从左到右),返回子串开始位置的索引,如果没有找到则返回-1。 -
rfind()
: 与find()
类似,但是从右向左查找子串的位置。 -
index()
: 与find()
类似,但是当子串不存在时,会抛出 ValueError 异常。 -
count()
: 统计字符串中子串出现的次数。 -
isdigit():判断指定字符是否是数字
双指针回顾:
“通过两个指针在一个for循环下完成两个for循环的工作”