【问题标题】:Given a string, return true if the first instance of “x” in the string is immediately followed by another “x”给定一个字符串,如果字符串中“x”的第一个实例紧跟另一个“x”,则返回true
【发布时间】:2020-12-10 03:03:52
【问题描述】:

注意:

  • 大写的 X 不算作“x”的出现。

  • 如果没有 "x" 则返回 false

以下代码是我的解决方案,但我没有得到正确答案。

def triple_x(s):
    
    
    for i in (s):
        
        if i == 'x' and i+1 =='x':
            return True
        else:
            return False

测试用例:

tripleX("abraxxxas") → 真

tripleX("xoxotrololololololoxxx") → 假

tripleX("softX kitty, warm kitty, xxxxx") → true

tripleX("softx kitty, warm kitty, xxxxx") → false

如果有人可以帮助我,我将不胜感激。谢谢。

【问题讨论】:

  • 函数名称表明您实际上是在寻找三个 x,但您询问的是双 x - 对吗?
  • 如果下一个元素再次为“x”,则该函数将在字符串中查找“x”的第一个实例,您的返回值应为 True。 @Grismar

标签: python string boolean


【解决方案1】:

你所要做的就是做一些类似的事情

def myx(word):
    if 'xx' in word : return True
    return False
    
print(myx('xoxotrololololololoxxx')) # this will print out true s

更简单、更干净。希望这能解决您的问题

【讨论】:

  • 感谢您的帮助。您的代码工作正常,但在某些情况下它不起作用。
  • 如果可以的话,我可以知道测试用例吗?
  • ("xoxotrololololololoxxx"),False)。 /("softx kitty,warm kitty,xxxxx"),False)
【解决方案2】:

s 周围的括号是多余的。 i 运行在 s 之上,所以它会一次取一个 s 中字符的值。

因此,i+1 不会给你 s 中的下一个字符,而是尝试将 1 加到 s 的那个字符上,这没有任何意义。

如果您的i 范围超过s 中的字符索引,则可以使用您的解决方案。此外,您当前的解决方案没有考虑像 s = "oxoxxx" 这样的情况,其中第一个 x 不符合您的标准,但第二个满足(在这种情况下,我假设您需要答案为 False )

这与您的解决方案很接近,但有效:

def triple_x(s):
    for i in range(len(s)):
        if s[i] == 'x':
            if i+1 < len(s) and s[i+1] =='x':
                return True
            else:
                return False

一个更短的写法:

def triple_x(s):
    for i in range(len(s)):
        if s[i] == 'x':
            return i+1 < len(s) and s[i+1] =='x':

当比较返回 bool 值时。

这是一个接近最佳的解决方案:

def triple_x(s):
    i = s.find('x')
    return i+1 != len(s) and s[i+1] == 'x'

【讨论】:

  • 您的代码运行良好,但不适用于这些测试用例。 Test_case(triple_x(""), False) Test_case(triple_x("这里没有XXX"), False)
  • 我在“最佳”情况下进行的长度检查不在以前的情况下,我希望它们现在都能正常工作。
【解决方案3】:

我会在此处使用re.search 进行正则表达式方法:

inp_valid = "blah blah xx other text here"
if re.search(r'^[^x]*xx', inp_valid):
    print "VALID"
else:
    print "INVALID"

inp_invalid = "blah blah xtra text here"
if re.search(r'^[^x]*xx', inp_invalid):
    print "VALID"
else:
    print "INVALID"

打印出来:

VALID
INVALID

【讨论】:

    猜你喜欢
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 2020-04-22
    相关资源
    最近更新 更多