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