Regex 字模式与字符模式的匹配

Regex 字模式与字符模式的匹配,regex,algorithm,Regex,Algorithm,因此,我有一个非常有趣的问题,我有一个长字符串s,例如: eatsleepeatwalksleepwalk esetst 和更小的字符串p,例如: eatsleepeatwalksleepwalk esetst 因此,通过快速查看,您可以推断: eat = e sleep = s walk = t 问题陈述是判断较小字符串p中的字符模式是否与较大字符串s中的单词匹配 Size of s = 0 to 1000 Size of p = 0 to 1000 我知道使用KMP进行简单的模式

因此,我有一个非常有趣的问题,我有一个长字符串s,例如:

eatsleepeatwalksleepwalk
esetst
和更小的字符串p,例如:

eatsleepeatwalksleepwalk
esetst
因此,通过快速查看,您可以推断:

eat = e
sleep = s
walk = t
问题陈述是判断较小字符串p中的字符模式是否与较大字符串s中的单词匹配

Size of s = 0 to 1000
Size of p = 0 to 1000
我知道使用KMP进行简单的模式匹配,但是这个问题似乎很棘手,我无法找到解决这个问题的起点

有什么提示吗


编辑1:查看下面的@never答案。似乎很有意思,正在等待空间/时间复杂性的检查。

尝试使用JavaScript RegExp解决它

$(“按钮”)。单击(函数(){
设p=$(“#p”).val()
,s=$(“#s”).val()
,regMap=[]
,regStr=“”;
for(设c/p){
设idx=regMap.indexOf(c);
如果(idx==-1){
regMap.push(c);
regStr+=“(.+)”;
}否则{
regStr+=“\\”+(idx+1);
}
}
设reg=newregexp(“^”+regStr+“$”);
log(“使用的RegExp:+regStr”)
控制台日志(“结果:+reg.测试”);
});

字符串's`:
字符串'p':

运行
您或多或少需要在此处进行暴力搜索。也就是说,只看较小字符串的第一个字符,e可以代表e,ea,eat,eats。。。您只需尝试所有这些可能性即可。@n.m.您的评论很有帮助。然而,我更喜欢任何有效的方法来创建这个映射[words char]。蛮力会使运行时间变为O(n^2)或更糟,我正试图避免这种情况。s的最大长度?@n.m.“e”也可以映射到一个不以“e”开头的单词,在示例中,walk映射到“t”@arenard嗯,是的,当然。但是在这个例子中,e映射到一个以e开头的单词。你的解决方案的复杂性?我给a+1,因为你的解决方案实际上是有效的。在接受这个答案之前,我将检查空间/时间的复杂性。@arenard我看不出不同字母不能映射到相同子字符串的要求。如果有这样的要求,那么一个简单的正则表达式解决方案就行不通了。@arenard我想你把
p
&
s
混为一谈了,请再试试你的例子,它对我很有效(结果是
false
)。@I_Debug_一切我不是评估正则表达式复杂性的专家,抱歉我帮不了什么忙。