匹配字型和字符型

时间:2018-08-13 04:29:43

标签: regex algorithm

所以我有一个非常有趣的问题,我有一个长字符串 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 答案。似乎很有趣,正在等待时空复杂性的检验。

1 个答案:

答案 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>