两个字符串之间的精确匹配 - 线性编辑距离?

时间:2013-10-14 01:04:06

标签: regex string algorithm dynamic-programming

这是一个问题,给定一个包含以下字符的字符串: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方法的情况下解决?

1 个答案:

答案 0 :(得分:1)

感谢@RealzSlaw的建议。我的问题是寻找线性解决方案而且似乎是不可能的,仅仅是因为这种情况(现在使用正则表达式语法):

isMatch("a?a?b?b?b?a?a?b?a?","abbab")

它询问abbab是否是aabbbaaba的子序列,据我所知,它是NP难的,因此线性解决方案似乎是不可行的。