代码随想录算法训练营第九天 | 151. 反转字符串中的单词、55. 右旋字符串(第八期模拟笔试)、28. 找出字符串中第一个匹配项的下标(kmp)

python对于字符串的索引处理很高效;不同编程语言确实有很多可以用来优化的技巧。

151. 反转字符串中的单词

leetcode 151. 反转字符串中的单词
代码随想录

class Solution:
    def reverseWords(self, s: str) -> str:
        # 先整体交换,然后再遇到空格就交换前面的
        # s = s[::-1].strip()
        # res = " ".join(word[::-1] for word in s.split())
        # return res
        words = s.split()
        left, right = 0, len(words) -1
        while left < right:
            words[left], words[right] = words[right], words[left]
            left += 1
            right -= 1
        return " ".join(word for word in words)

55. 右旋字符串(第八期模拟笔试)

卡码网 55. 右旋字符串(第八期模拟笔试)
代码随想录

pyhton这道题因为有字符串索引就比较好做,普通解法的话:先整体交换,然后分成两段局部交换(前面的 n n n个字符reverse,后面的 l e n ( s ) − n len(s)-n len(s)n个字符reverse)

n=int(input())
s=input()

temp = len(s)-n
print(s[temp:]+s[:temp])

28. 找出字符串中第一个匹配项的下标

leetcode 28. 找出字符串中第一个匹配项的下标
代码随想录

kmp算法上线初探,next数组的定义最长相等前后缀的长度;当失败匹配的时候,进行回退next[j-1]存放的就是该回退到哪里。

class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        nextArray = [0] * len(needle)
        j = 0 # 下一次改匹配的位置
        for i in range(1,len(needle)):
        # 寻找next数组的时候,i=1,与使用的时候不同
            while j > 0 and needle[i:i+1] != needle[j:j+1]:
                j = nextArray[j - 1]
            if needle[i:i+1] == needle[j:j+1]:
                j += 1
            nextArray[i] = j
        # print(nextArray)
        j = 0
        for i in range(len(haystack)):
            while j > 0 and haystack[i:i+1] != needle[j:j+1]:
                j = nextArray[j - 1]
            if haystack[i:i+1] == needle[j:j+1]:
                j += 1
            if j==len(needle):
                return i - len(needle) + 1
        return -1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值