社区
数据结构与算法
帖子详情
*匹配问题
Non_Recursive
2011-11-27 10:16:57
有大量的已知的串, 有些串是带通配符的, 如 affc* 或 abc*.txt 或 *.txt
假设有类似这样的串几千条, 有什么快速的算法知道某一个字符串是否匹配已知串, 如 abccccccc.txt 可以匹配到
abc*.txt, 匹配到即返回了。
...全文
323
11
打赏
收藏
*匹配问题
有大量的已知的串, 有些串是带通配符的, 如 affc* 或 abc*.txt 或 *.txt 假设有类似这样的串几千条, 有什么快速的算法知道某一个字符串是否匹配已知串, 如 abccccccc.txt 可以匹配到 abc*.txt, 匹配到即返回了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
oo
2011-11-29
打赏
举报
回复
如果模式串里只有一个‘*’,转DFA还是不算太难
如果‘*’很多的话就比较麻烦
白米若雪
2011-11-29
打赏
举报
回复
如果只有几千条可以把这几千条做成一个大的状态机,比如"abc*.txt" | "def*.txt" | "ghi*.txt" ... ,要注意的是状态机的'*'号和通配符'*'是有不同意义的。但是采用这么大的状态机,效率不会好到哪去,但是如果有一些已知条件,可以大大简化状态机。
如果已知字符串有共同同缀什么的,可以采用TST。如果有共同后缀,可以采用后缀树什么的,都是一种状态机的化简。建立状态机时,把'*'号去掉,并在前一个字串对应的节点把loop标志位设为true。搜索时可以按图的算法搜索,搜索的复杂度与状态机的大小成正比。
codesnail
2011-11-28
打赏
举报
回复
用脚本用正则库。
状态机太底层了,而且不容易理解,c/C++也有正则库的。
wangqs1988
2011-11-28
打赏
举报
回复
[Quote=引用 2 楼 hnlgdxyjs 的回复:]
DFS 是深度优先搜索
DFA 是有限状态确定自动机, 你写错了。
如果用 DFA, 能不能把DFA生成过程及匹配过程大概描述下?
[/Quote]
可以用二维数组,第1维是状态的标号,第2维是一个表,表示字符及对应的去向
turing-complete
2011-11-28
打赏
举报
回复
几千条?
必须顺序查找!
lmc158
2011-11-28
打赏
举报
回复
把abc*.txt做成DFS(有限状态确定自动机),看abccccc.txt是否在DFS中能到达终点
HNLGDXYJS
2011-11-28
打赏
举报
回复
DFS 是深度优先搜索
DFA 是有限状态确定自动机, 你写错了。
如果用 DFA, 能不能把DFA生成过程及匹配过程大概描述下?
wangqs1988
2011-11-28
打赏
举报
回复
[Quote=引用 7 楼 non_recursive 的回复:]
有没有认真一点的回复?
4 楼为什么确定要顺序遍历, 这应该是最差的做法。
5 楼的也看不明白。
6 楼的用脚本明显不行, 性能太差。
DFA 应该能搞定这个问题的, 请问有没有熟悉DFA的, 大概讲下流程就行, 我只需要支持 *, 不用?之类的。
谢谢。
[/Quote]
就是这样对待回复的吗,5楼已经说得很清楚了,还不明白请百科DFA
turing-complete
2011-11-28
打赏
举报
回复
[Quote=引用 7 楼 non_recursive 的回复:]
有没有认真一点的回复?
4 楼为什么确定要顺序遍历, 这应该是最差的做法。
5 楼的也看不明白。
6 楼的用脚本明显不行, 性能太差。
DFA 应该能搞定这个问题的, 请问有没有熟悉DFA的, 大概讲下流程就行, 我只需要支持 *, 不用?之类的。
谢谢。
[/Quote]
一千个无序字符串,除了顺序查找,你能告诉我还有什么方法更快吗?
再快也要把所有字符串遍历一下,看看能不能找到,如果是有序的那就不一样了,可以用折半查找。
如果你的情况是,要在这些字符串上进行频繁查找,那么排序一下或者重新组织一下数据结构是值得的。
Non_Recursive
2011-11-28
打赏
举报
回复
有没有认真一点的回复?
4 楼为什么确定要顺序遍历, 这应该是最差的做法。
5 楼的也看不明白。
6 楼的用脚本明显不行, 性能太差。
DFA 应该能搞定这个问题的, 请问有没有熟悉DFA的, 大概讲下流程就行, 我只需要支持 *, 不用?之类的。
谢谢。
wangqs1988
2011-11-28
打赏
举报
回复
把abc*.txt做成DFS(有限状态确定自动机),看abccccc.txt是否在DFS中能到达终点
关于*
匹配
的
问题
*
匹配
1、通配符
匹配
class Solution { //动态规划:dp[i][j]:表示s前i个字符串和p前j个字符串是否
匹配
public boolean isMatch(String s, String p) { int len1=s.length(); int len2=p.length(); boolean[][] dp=new boolean[len1+1][len2+1]; dp[0][0]=true;
【JavaScript replace】
匹配
*星号
问题
【JavaScript replace】
匹配
*星号
问题
在使用replace /*/
问题
replaceAll
问题
在使用replace /*/
问题
var str = '1111*2*2*2*2'; 在使用js的时候使用replace的时候规则写成/*/会报错,那么我们是不是就不能通过js来
匹配
星号了? str.replace(/*/g,'-') 当然不是,可以通过下面的方式来进行替换: str = str.replace(/\*/,'*') 最后说一下,如果想使用replace达到
匹配
多个的话,记得
含有*的字符串
匹配
问题
Question 字符串1:只含有英文字母 字符串2:含有英文字母和*,其中符号*表示
匹配
任意字符0或者多次,即正则表达式里面的含义。 现在给定这样的两个串,要求判断是否
匹配
? bool isMatch ( const char *str1, const char *str2) 例如:str1 = “hello”, str2 = “he*o”,则二者
匹配
,返回true,str...
js正则
匹配
遇到换行符的
问题
js正则
匹配
遇到换行符的
问题
问题
描述
问题
解决
问题
描述 在项目中读取了一个导出json的js文件(由于一些原因这里没有使用import),在用正则
匹配
出里面的json时出现
问题
,没有获得预期的效果,
匹配
的结果是个null。 message = new Function('return ' + /(?<=const).*(?=export)/.exec(message.toString())[...
二分
匹配
类似数独
问题
题意:n*n的格子,每行和每列都是1~n的每个数出现一次。给出前k行,补全剩下的n-k行。1<=n<=100,0<k<=n. 题解:二分
匹配
裸题。 1.假如第i行有100种填写方法,那么每一种均可,不会出现第p种填写方案使后面行无法填写而第q种填写方案使后面行可以填写的情况。 2.逐行
匹配
即可。 #include<bits/stdc++.h> #def...
数据结构与算法
33,025
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章