这是一个问题,给定一个包含以下字符的字符串:a-z
,.
,*
以及另一个字符来自a-z
的字符串。其中*
可以删除前面的字符,否则*被跳过,.
可以匹配任何单个字符。问题是第一个字符串是否与第二个字符串匹配。
注意:这是我发现的问题陈述,但在这种情况下,字符*
执行与正则表达式?
相同的功能。
示例:
isMatch("a*", "") = true; //"a*" could be "a" or an empty string ""
isMatch(".", "") = false;
isMatch("ab*", "a") = true;
isMatch("a.", "ab") = true;
isMatch("a", "a") = true;
我已经使用略微修改的编辑距离解决了这个问题,我只知道2D动态编程方法。我想知道这个问题是否存在线性解决方案,也许它可以在没有dp方法的情况下解决?
答案 0 :(得分:1)
感谢@RealzSlaw的建议。我的问题是寻找线性解决方案而且似乎是不可能的,仅仅是因为这种情况(现在使用正则表达式语法):
isMatch("a?a?b?b?b?a?a?b?a?","abbab")
它询问abbab
是否是aabbbaaba
的子序列,据我所知,它是NP难的,因此线性解决方案似乎是不可行的。