leetcode-28-Implement strStr()

题目:Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

题目大意:给两个字符串haystack和needle。返回needle在haystack中第一次出现的位置。

思路:遍历haystack。如果在i位置满足条件就返回当前位置。注意边界条件。

开始试了一下needle长度为1的时候,然后代码结构基本不变。第一次用切片,在i位置切片j长度。AC 700ms勉过。。效率太低。

class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        j=len(needle)
        k=len(haystack)
        if j==0: return 0
        if k==0: return -1
        for i in range(k):
            if haystack[i:i+j]==needle:
                return i
        return -1
class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        j=len(needle)
        k=len(haystack)
        if j==0: return 0
        if k==0 or j>k: return -1
        for i in range(k):
            n=0
            if k-i<j:
                break
            for m in range(j):
                if haystack[i]!=needle[0]:break
                if haystack[i+m]==needle[m]:
                    n+=1        
                if n==j:
                    return i
        return -1

判断条件用统计变量n来做。在i位置判断j次,haystack从i位置开始的元素和needle的元素一一比较,相等就n+1。如果n等于needle的长度就返回当前i位置。如果haystack的当前位置第一个元素不等于needle首元素,就break。
AC 72ms。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值