正则表达式填字游戏求解器

标签 regex string algorithm performance time-complexity

正在关注 Find string to regular expression programmatically? ,我们假设找到与正则表达式匹配的字符串需要线性时间。我的直觉告诉我们,我们也可以通过编程方式解决正则表达式填字游戏,对吧?

如果是,解决 NxM 正则表达式填字游戏的时间复杂度是多少?

例子:

enter image description here

最佳答案

即使您不允许反向引用,它也是 NP 难题。 exact set cover problem 有一个简单的映射对这个问题。

如果您有集合 S[1]、S[2]、...、S[n](带有 union S),并且不失一般性,这些集合包含所有数字 1...N 对于某些 N。将 S[i] 表示为长度为 N 的字符串,1 在第 k 个如果 k 在 S[i] 中,则放在 0 中。 让您的正则表达式拼图的列都相同 -- 0*10*,第 k 行是“(S[k])|(0*)”。

例如,如果 S[1] = {1, 4},S[2] = {2},S[3] = {3},并且 S[4 ] = {2, 3},那么谜题就是:

         0*10*  0*10*  0*10*  0*10*
1001|0*
0100|0*
0010|0*
0110|0*

这个正则表达式难题的解决方案是用 S[i] 精确覆盖 {1, 2, 3, 4}。

关于正则表达式填字游戏求解器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46279406/

相关文章:

javascript - 用jquery在字符串中查找最后一个单词的第一个字母(字符串可以有多个单词)

c++ boost进程间交换(复制)非共享和共享字符串 vector

algorithm - 我在使用动态规划吗? c中的矩阵链乘法

Java使用否定前瞻将字符串拆分为字符

C++正则表达式多行替换

R grep整个单词由特殊字符分隔

javascript - 如何使用javascript转义正则表达式特殊字符?

python - 在 Python 中使用 Phobius 输出从序列中选择区域

c - 我如何在 C 中生成随机 double ?

python - Forster-Overfelt 版本的 Greiner-Horman 多边形裁剪算法的伪代码有什么问题?