• Sunday算法


    算法思想:

      子串每次从前向后比较,比较到最后和源字符串一样就说明匹配到了,只要遇到不一样的就看对齐后的子串末尾对应的源串的后一个字符是否在子串中存在根据这个来挪子串的位置,如果挪到最后还不能找到的话就说明没有

    实现过程如下:

      目标是为了找wo

    H e l l o w o r l d
    w o

      1、首先wo和He进行匹配,一个一个配,发现H和w不匹配,然后再和长度的下一位l进行匹配,发现l也不在匹配内容当中,然后移到第四位如下

    H e l l o w o r l d
    w o

      2、然后按上步再次进行匹配,发现还是没有,然后继续。

    H e l l o w o r l d
    w o

      3、然后发现wo分别与待匹配字符串相比发现一样,最后返回w的地址,匹配结束。

      需要注意的是,在匹配长度的下一位字符如果在匹配字符中的话,则与匹配字符串对齐然后一一比对,若比对成功返回第一个字符的地址,否则再按第一步继续。

    代码如下:

    def sunday(S, T):
        ls, lt = len(S), len(T)
        #记录下标
        d = 0  
        #保证T有成为S子串的前提下并且循环
        while d <= ls - lt:       
            # 判断下标是否超出,超出这说明不存在子串
            if d > ls: return False
            if S[d:d+lt] == T:
                #如果符合,返回下标
                return d
            else:
                p = T.rfind(S[d+lt])
                #返回字符串最后一次出现的位置,如果没有匹配项则返回-1
                if p == -1:
                    #没有匹配,跳子串长度个距离
                    d += lt + 1
                else:
                    #有匹配,对齐查看是否全部匹配
                    d += lt - p
        return False
    
  • 相关阅读:
    关于如何学习C语言
    2020软件工程作业04
    2020软件工程作业03
    2020软件工程作业02
    2020软件工程作业01
    3.语法树,短语,直接短语,句柄
    2.文法和语言
    Linux——如何将Red Hat Enterprise Linux 6的语言改为中文?
    编译原理概述
    编译原理概述-第一次作业
  • 原文地址:https://www.cnblogs.com/Lance-WJ/p/13503475.html
Copyright © 2020-2023  润新知