刷题营 第九天

题目:剑指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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值