暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

算法---rfind

coolpython 2017-04-16
123

此前已经实现了find方法,文章地址:

算法---查找子串

反向查找子串

今天将要实现的方法是rfind,find是从左侧开始查找,rfind是从右侧开始查找,以下面的字符串为例

cdeabcdeaba

如果是查找字符串cde,那么find方法返回的是0,而rfind方法返回的是5。

如果你已经掌握了find方法的精髓,其实写出一个rfind方法并不难,从思路上讲完全一样,但从右侧开始查找子串,逻辑上又有很多别扭的地方

大致思路

首先,遍历字符串的过程要从右侧开始

其次,比较的字符不再是子串的首个字符,而是子串的末尾字符,找到末尾字符后还要比较剩余的部分

最后还要反向的计算子串开始的位置

这类算法题目并不复杂,需要的是一点点耐心和理性的分析

示例代码


#coding=utf-8

string = "cdeabcdeaba"
def rfind(string,sub):
   index = -1
   for i in range(len(string)-1,-1,-1):
       if string[i] == sub[-1]:
           m = i
           n = len(sub)-1
           while n >= 0 and m >=0 and string[m] == sub[n]:
               m -= 1
               n -= 1

           if n == -1:
               return m + 1

   return index

print rfind(string,'cde')


文章转载自coolpython,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论