永发信息网

用python实现strstr().

答案:1  悬赏:40  手机版
解决时间 2021-04-20 05:27
用python实现strstr().
最佳答案
class Solution(object):
    def strStr(self, haystack, needle):
        """
        :type haystack: str
        :type needle: str
        :rtype: int
        """
        #使用Boyer-Moore算法
        lenHaystack = len(haystack);
        lenNeedle = len(needle);
        if lenNeedle == 0:
            return 0;
        i = j = lenNeedle - 1;
        last = self.last_occur(needle);         #预处理获得各个字母在模式串中最后出现位置
        while i < lenHaystack:
            if needle[j] == haystack[i]:
                if j == 0:                      #匹配成功
                    return i;
                else:                           #只是部分匹配成功,比较前一个字符
                    j -= 1;
                    i -= 1;
            else:                               #暂时失配,取下一个比较位置
                i += lenNeedle - min(j,last[haystack[i]] + 1);
                j = lenNeedle - 1;
        return -1;
            
        
    def last_occur(self,needle):
        """
        :type needle: str
        :rtype: dict
        """
        last = {'a':-1,'b':-1,'c':-1,'d':-1,'e':-1,'f':-1,'g':-1,'h':-1,'i':-1,'j':-1,'k':-1,'l':-1,'m':-1,'n':-1,'o':-1,'p':-1,'q':-1,'r':-1,'s':-1,'t':-1,'u':-1,'v':-1,'w':-1,'x':-1,'y':-1,'z':-1};
        for i in range(len(needle)):
            last[needle[i]] = i;
        return last;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我表弟两个盗窃同案已岀狱,表弟巳过追坼期,
电视剧我的前半生语录,我的前半生 贺函骑得什
日语[上手]一共有几种读音呢??
集成灶是什么意思,集成灶怎么样,现在用 的是
请问LM1117稳压管和LM3940有什么区别么?谢谢
写一段孤独的伤感文章,越伤感越好,看了会哭
篮球运动NBA常规赛
有的人生孩子为什么宫口不开
把几个词语连成一句话,一句话被人传来传去已
两个心是什么字,一个心形里面有两个眼睛的 是
撒贝宁怎么了?为什么有人说他狡猾?
家里射灯坏了怎么换灯泡?
次数和系数是什么,次数最高项的次数 是什么意
安慰后悔的人的句子,形容很后悔吵架的句子
蒸豆沙包用红糖好还是白糖好
推荐资讯
我有一个朋友,他妈在学校当老师,他妈总是让
关四肉食经销部地址在哪,我要去那里办事
MW系统支持的软件多吗?比如下QQ游戏,担没有
我不是有的心的伤害
最能帮忙申请一个E63证书?
孕妇用什么可以安全治好癣
我的RX7改进和漂移还好吧
石上村地址在哪,我要去那里办事
商业招商属于什么类型,招商部是做什么的
向日葵随着太阳而转移那阴天它朝那个方向?
CBG交易MH角色问题!
羊毛衫的制作工艺流程
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?