【问题标题】:function that returns `True` if a string contains exactly two instance of a substring and `False` if it doesn't如果字符串恰好包含子字符串的两个实例,则返回 `True` 的函数,如果不包含则返回 `False`
【发布时间】:2020-09-24 13:08:08
【问题描述】:

我正在尝试编写一个函数,如果字符串恰好包含子字符串的两个实例,则返回 True;如果不包含,则返回 False。

我收到一个错误:

return' outside function

我觉得我已经很接近了,但我不太明白,如果能指出正确的方向,我将不胜感激。 是否应该使用递归?

s =  ("xeroxes")
exes = str(x)
count = 0
def has_two_X(s):
    count = s.count(exes)
    for exes in s:
        count = +1
       if count ==2:
        return True
       else:
        return False
if __name__ == "__main__":
    print("string has :",count.s(exes))

【问题讨论】:

  • 您没有将函数的内容缩进,因此您的 return 不在函数中(这就是您的错误消息告诉您的内容)。缩进所有应该在函数中的代码。另外,我假设您的第一行应该在xeroxes 周围加上引号。旁注:if boolcondition: return True else: return False 可以简化为return boolcondition。而且您的循环对于 count 调用是多余的。所以在这种情况下,整个函数可以折叠到return s.count(exes) == 2。
  • 你的缩进看起来很奇怪;函数中的所有代码都需要缩进...
  • 你说得对,我编辑了代码并再次尝试,但仍然出现同样的错误

标签: python-3.x string function count


【解决方案1】:

如果代码必须在子字符串有两个或多个实例的情况下返回 True,您可以创建一个字典并在字典中是否存在值时返回 True。

mydict = {}
for letter in s:
    if letter in mydict:
         return True
    else:
         mydict[letter] = 0
return False #Since there is no substring (two substring can be formed only if it has two same letters in the string)

要准确查找它是否有两个子字符串,我建议您使用相同的方法来维护字典和存在的子字符串计数。将所有子字符串/计数添加到字典中,这将需要 O(n^2) 来生成所有子字符串和大约 - O(n^2) 哈希图内存。

构造hashmap后,如果hashmap恰好出现两次子串,则可以遍历hashmap返回True。

【讨论】:

    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 2015-05-02
    • 2014-10-30
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多