• he?p

    • help, heap, √
    • hellp, ×
  • *p*(必须包含 p,左右随意)

    • help, papa, √
    • hello ×
  • *bb*(必须包含连续的两个 bb,左右随意)

    • babbc √

1. 穷举法的处理

? 的匹配处理其实很好处理,困难的地方还在于 * 的匹配问题。

假定给定的范式包含 m 个“*”,每次出现“*”就分割 1 次范式。那么,“此范式是否对应字符串”的问题可分为 m+1 个子问题。例如,范式t*l?*o*r?ng*s可分为{t*, l?*, o*, r?ng*, s}。那么当给出字符串thelordoftherings时,为了找出字符串中的前几个对应第一个分割快,穷举搜索法会尝试所有可能的组合。找出对应于第一个分割快的 3 (本例为前 3 )个字符后,利用递归调用就能很容易地判断出剩下的字符串lordoftings是否对应于剩余的 4 个分割快。

bool match(const string& w, const string& s){
int pos = 0;
while (pos < w.size() && pos < s.size() && (w[pos] == '?' || w[pos] == s[pos]))
++pos;
if (pos == w.size())
return pos == s.size();
if (w[pos] == '*'){
for (int skip = 0; pos + skip <= s.size(); ++skip){
if (match(w.substr(pos+1), s.substr(pos+skip)))
return true;
// pos + skip <= s.size()
// 匹配全部
}
return false;
}
}

最新文章

  1. 安装DRools开发环境
  2. js 日期对象Date以及传参
  3. zmq学习笔记
  4. 在C#中使用C++编写的类
  5. Servlet 编程 http请求类型
  6. Win 64 register usage
  7. 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)
  8. 瞬间从IT屌丝变大神——HTML规范
  9. AngularJs(一) MVC 模式的应用
  10. ie11强制兼容模式打开
  11. CloseableHttpClient获取https请求不验证证书
  12. 560. Subarray Sum Equals K 求和为k的子数组个数
  13. Confluence设置MySQL数据库报错:必须使用&#39;READ-COMMITTED&#39;作为默认隔离级别。
  14. R绘图 第十一篇:统计转换、位置调整、标度和向导(ggplot2)
  15. kong API gateway
  16. CVE-2017-8046 复现与分析
  17. Html5之web workers多线程
  18. 流媒体协议之RTSP详解20170922
  19. ubuntu18(笔记本) faster-rcnn实例程序运行
  20. functions函数插件的定义和使用

热门文章

  1. 用NPOI、C#操作Excel表格生成班级成绩单
  2. Lua 是一个小巧的脚本语言
  3. js数组sort方法详解
  4. 59.C++与正则表达式
  5. Dubbo学习总结(1)——Dubbo入门基础与实例讲解
  6. C# MQTT 服务端客户端通讯
  7. Myeclipse集成Maven(图文说明)
  8. oracle on linux 巡检脚本-部分
  9. IK分词器插件elasticsearch-analysis-ik 6.1.1
  10. WSDL生成dll