打酱油的工程师 2023-01-14 10:51 采纳率: 66.7%
浏览 25
已结题

Python:字符串转换题正确率仅70%

时间限制:1000ms内存限制:256M
题目描述
已知一个字符串a,b。 字符串b中包含特殊符号’.’,’’。 ‘.’表示该字符可以变成任意字符,’ ‘表示该字符的前一个字符可以变成任意多个。 现在我们想知道b可否通过特殊符号变成a。
输入描述:
第一行输入字符串a.(1<=len(a)<=1000) 第二行输入字符串b.(1<=len(b)<=1000)
输出描述:
如果可以输出”yes”,否则输出’no’

class Solution:
    def __init__(self) -> None:
        pass

    def isMatch(self,s, p):
        if not p:
            return not s
        first_match = bool(s) and p[0] in {s[0], '.'}
        if len(p) >= 2 and p[1] == '*':
            result= (self.isMatch(s, p[2:]) or
                    first_match and self.isMatch(s[1:], p))
        else:
            result= first_match and self.isMatch(s[1:], p[1:])
        if result==True:
            return "yes"
        else:
            return "no"

if __name__ == "__main__":
    a = input().strip()
    b = input().strip()

    sol = Solution()
    result = sol.isMatch(a, b)
    print(result)


代码通过率只有70%,不知道问题出在哪?

  • 写回答

1条回答 默认 最新

  • 懂事的人 2023-01-14 11:39
    关注

    因为在调用递归函数 isMatch() 时,有可能会出现字符串s和p的长度为0的情况,但是在代码中并没有对这种情况进行特判。在字符串s和p的长度为0时,first_match的值会被赋值为False,但是在代码中并没有对这种情况进行特判,导致程序出现错误。

    另外,在代码中,当len(p) >= 2 and p[1] == '*' 时,会进行递归比较下一个字符,但是在这种情况下,p[2:]的长度可能为0,导致程序出现错误。

    可以在isMatch()函数中加入特判条件来解决这个问题,比如在字符串s和p的长度为0时,return True,在len(p)<2 或者 p[1] != '*' 时 return False,来避免出现错误
    如果可以望采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月23日
  • 已采纳回答 1月15日
  • 创建了问题 1月14日

悬赏问题

  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了