【问题标题】:Why all the testcases are not passing? palindrome program为什么所有的测试用例都没有通过?回文程序
【发布时间】:2021-04-20 15:14:17
【问题描述】:

给定一个字符串s,判断它是否是回文,只考虑字母数字字符并忽略大小写。

为什么下面的解决方案不接受某些测试用例?

s = "".join(s)
s = s.lower()
if s==s[::-1]:
    return "true"
else:
    return "false"

输入:s = "A man, a plan, a canal: Panama"

输出:true

这个测试用例被接受:

输入:s = "race a car"

输出:false

这个测试用例返回的是真而不是假

【问题讨论】:

    标签: python python-3.x string pointers data-structures


    【解决方案1】:

    目前这两种情况都是returning false

    根据问题中的这部分

    只考虑字母数字字符并忽略大小写。

    您可以首先使用 re.sub 和匹配除列出的字母数字范围之外的所有字符的模式 [^a-zA-Z0-9]+ 从字符串中删除所有非字母数字字符。

    import re
    strings = [
        "race a car",
        "A man, a plan, a canal: Panama"
    ]
    
    for s in strings:
        s = re.sub(r"[^a-zA-Z0-9]+", "", "".join(s).lower())
        if s == s[::-1]:
            print("true: for {0}".format(s))
        else:
            print("false: for {0}".format(s))
    

    输出

    false: for raceacar
    true: for amanaplanacanalpanama
    

    Python demo

    【讨论】:

      【解决方案2】:

      如果你不打算使用正则表达式,你可以使用 isalnum() 字符串方法:

      s = ''.join(element for element in s if element.isalnum()).lower()
      if s==s[::-1]:
          print("true")
      else:
          print("false")
      

      【讨论】:

        【解决方案3】:

        所有都返回 false,因为您没有删除空格和特殊字符...

        A man, a plan, a canal: Panama 变为:amanap :lanac a ,nalp a ,nam a

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多