所以我有一个非常有趣的问题,我有一个长字符串 s ,例如:
eatsleepeatwalksleepwalk
和较小的字符串 p ,例如:
esetst
因此,您可以快速了解一下:
eat = e
sleep = s
walk = t
问题陈述是要判断小字符串p中的字符模式是否与大字符串s中的单词匹配
Size of s = 0 to 1000
Size of p = 0 to 1000
我知道使用KMP进行简单的模式匹配,但是这个问题似乎很棘手,我无法解决这个问题。
有任何提示吗?
编辑1:看看下面的 @Neverever 答案。似乎很有趣,正在等待时空复杂性的检验。
答案 0 :(得分:1)
试图使用JavaScript RegExp解决它
$("button").click(function() {
let p = $("#p").val()
, s = $("#s").val()
, regMap = []
, regStr = "";
for (let c of p) {
let idx = regMap.indexOf(c);
if (idx === -1) {
regMap.push(c);
regStr += "(.+)";
} else {
regStr += "\\" + (idx + 1);
}
}
let reg = new RegExp("^" + regStr + "$");
console.log("RegExp used: " + regStr)
console.log("Result: " + reg.test(s));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>String `s`: <input type="text" id="s" value="eatsleepeatwalksleepwalk" /></label><br>
<label>String `p`: <input type="text" id="p" value="esetst" /></label><br>
<button type="button">Run</button>