题目:剑指Offer58-II.左旋转字符串
初始想法:利用split函数将S分割成【0,k) 和【k,size)两个字符串,再进行拼接
不过split好像不支持第n个字符开始分割?
利用数组的切片就可以实现
return s[n:] + s[:n]
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
s = list(s)
s[0:n] = list(reversed(s[0:n]))
s[n:] = list(reversed(s[n:]))
s.reverse()
return "".join(s)
reversed是函数,reverse是方法,上面的代码中,我们使用list()将reversed()函数返回的对象转换回列表。(字符串的部分反转用reversed,全部反转可以直接用reverse方法)
我的错误尝试:
class Solution:
def reverseLeftWords(self, s: str, n: int) -> str:
s=list(s)
s[0:n]=s[0:n:-1](这一步是错误的,她直接把前n个字符去掉了,
s[n:]=s[n::-1]
s=s[: :-1]
return ''.join(s)
28. 实现 strStr()
初始想法:用find方法,return haystack.find(needle)通过
如果用index方法,在不匹配时会抛出ValueError异常,所用用try: except:语句
KMP算法没有理解
459.重复的子字符串
掌握用find方法的实现就行了
所以判断字符串s是否由重复子串组成,只要两个s拼接在一起,里面还出现一个s的话,就说明是由重复子串组成。
当然,我们在判断 s + s 拼接的字符串里是否出现一个s的的时候,要刨除 s + s 的首字符和尾字符,这样避免在s+s中搜索出原来的s,我们要搜索的是中间拼接出来的s
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
n=len(s)
if n<=1:
return False
ss=s[1:]+s[:-1](去掉s+s 的首字符和尾字符)
return ss.find(s)!=-1 (ss.find(s)要么返回匹配的第一个位置的下标,要么返回-1,题目要求返回True和False,所以要加上!=-1)