【问题标题】:How to write a code to determine if a character is in a string or not?如何编写代码来确定字符是否在字符串中?
【发布时间】:2018-01-06 22:20:10
【问题描述】:

quiz 中,它告诉我编写一个代码,以确保一个字符是否在按字母顺序排序的字符串中,它告诉我二分搜索以确定一个字符是否在字符串中并告诉我编写递归代码,不要使用“in”(for i in ...)

我的代码是这样的:

def isIn(char, aStr):
    '''
    char: a single character
    aStr: an alphabetized string

    returns: True if char is in aStr; False otherwise
    '''
    var = 0
    if char == '' and aStr == '':
        return True
    elif char == '' or aStr == '' :
        return False
    elif aStr[int((len(aStr))/2)] == char :
        return True
    elif aStr[int((len(aStr))/2)] < char :
        var = int((len(aStr))/2)
        return isIn(char , aStr[var:])
    elif aStr[int((len(aStr))/2)] > char :
        var = int((len(aStr))/2)
        return isIn(char , aStr[0 : var])

但是当我传递像 (char = 'o' aStr = 'efggnqu', or char = 'y' aStr = 'orstv',or char = 'y' aStr = 'aamotv') 这样的值时,它给了我一个错误像这样:

Traceback (most recent call last):
  File "submission.py", line 21, in isIn
    return isIn(char , aStr[0 : var])
  File "submission.py", line 18, in isIn
    return isIn(char , aStr[var:])
  File "submission.py"...OUTPUT TRUNCATED

解决办法是什么?

【问题讨论】:

  • 你可以简单地检查char in aStr它会返回True或False
  • @Gahan 指示说不要。

标签: python string char


【解决方案1】:

这里有一个解决方法:

def isIn(char, aStr):
    var = len(aStr) // 2 #Pulled out for readability (and speed)
    if char == '' and aStr == '':
        return True
    elif char == '' or aStr == '' :
        return False
    elif aStr[var] == char:
        return True
    elif aStr[var] < char:
        return isIn(char, aStr[var + 1:])
    elif aStr[var] > char:
        return isIn(char, aStr[:var])

关键部分是倒数第三行的 +1。没有它,一个字符会一遍又一遍地传递。 1 // 2 向下舍入为 0,"n"[0:] 又是 "n"

样本输出:

>>> isIn("o", "efgnqu")
False
>>> isIn("y", "orstv")
False
>>> isIn("y", "aamotv")
False
>>> 

【讨论】:

    猜你喜欢
    • 2010-10-27
    • 1970-01-01
    • 2012-07-07
    • 2014-03-30
    • 2013-05-13
    • 2014-09-20
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    相关资源
    最近更新 更多