zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    【5】TensorFlow光速入门-图片分类完整代码
    【4】TensorFlow光速入门-保存模型及加载模型并使用
    科研数据库结构
    高并发请求的缓存设计策略
    iOS-KVC的原理
    iOS-KVO的原理
    Kafka too many open files问题解决
    VLOOKUP函数-Excel
    arcgis sql 字符串替换
    ArcGIS矢量转栅格再发布切片服务,还是直接发布切片服务?有何区别?
  • 原文地址:https://www.cnblogs.com/Lance-WJ/p/13503475.html
Copyright © 2011-2022 走看看