我有一个正则表达式和一个匹配的模式字符串。我需要检查模式是否是由正则表达式生成的有效字符串。
现在问题变得有趣了,因为正则表达式只能包含'*'字符和预定义的字母集(a-z)。
此处'*'具有以下含义:
if regex is "a*": its closure { '','a','aa','aaa',.. }
if its "ab*c" : its closure { 'ac','abc','abbc', ... }
现在,有一个回溯解决方案,检查所有可能性。
我很想知道,自we only have " * " as a special symbol
以来,我们能否以更好的复杂性做到这一点。
答案 0 :(得分:0)
我们能以更好的复杂性做到吗?
是。只是省略回溯,你没有需要它们的替代。只有你必须规范你的正则表达式:
X*X
的所有出现更改为XX*
X*X*
的所有出现更改为X*
这可以线性复杂度(关于正则表达式长度)来完成;那么你可以在一次传递中循环输入字符串(关于输入长度的线性复杂度)。