2012-03-23 11 views
1

私はPythonには新しく、findを使用してrfind関数を実装しようとしています。findを使用したrfindの実装

def rfind_imp(s,t): 
    ss = s 
    fpos = 0 
    while(True):    
     fpos = s.find(t,fpos) 
     ss=ss[fpos:] 

     if(ss):  
      fpos = fpos +1  
     else: 
      return fpos 

print rfind_imp("I saw a donkey,I saw a saw "," ") 
print "I saw a donkey,I saw a saw ".rfind(" ") 

しかし、私が直面しています問題は、私はRFIND値として16日charcterを取得しています。私が間違いをしている場所を見つけるのに役立つ人もいます。また、findを使ってrfindをより良く実装するための提案は役に立つはずです。

+1

'reversed()'関数を試すことができます。 – kev

答えて

1

1文字以上の文字列に対応します)

def rfind2(s, t): 
    pos = s[::-1].find(t[::-1]) 
    if pos == -1: 
     return pos 
    return len(s) - pos - len(t) 
+0

ありがとうございます。あなたの実装は良く見えます。 – mousey

0

たぶんのようなもの:

def rfind_imp(s, t): 
    fpos = -1 
    while True: 
     pos = s.find(t, fpos + 1) 
     if pos == -1: 
      return fpos 
     fpos = pos 

tの多くocurrencesと文字列のおそらく高速です別のアルゴリズム:: (編集:作られた私は、あなたのアルゴリズムは次のように実装されるべきだと思う

def rfind_imp(s, t): 
    fpos = 0 
    while(True): 
     fpos = s.find(t, fpos) 
     if fpos == -1: 
      return pfpos 
     else: 
      pfpos = fpos 
      fpos += 1 
関連する問題