+ -
当前位置:首页 → 问答吧 → 两个带通配符的字符串,判断包含关系

两个带通配符的字符串,判断包含关系

时间:2011-11-01

来源:互联网

通配符只有*和?,*代表任意个任意字符,?代表单个任意字符

两个字符串都可能包含以上两个通配符,判断两个字符串是否相等,或具有包含、被包含的关系

例如:

* 包含 任何字符串

abc * abc 包含 abc ?123? abc

我尝试用正则表达式来解决,但某些情况可能导致误判。

不知有没有算法或者现成的库可以使用

作者: rcbblgy   发布时间: 2011-11-01

abc * abc d

abc ?123? abc ?
的关系是啥

作者: keeya0416   发布时间: 2011-11-01

显然,谁都不包含谁,它们之间没有关系

作者: rcbblgy   发布时间: 2011-11-01

相等就不用说了
包含与被包含也是同一个问题的两种形态
不失一般性
讨论 A 是否包含 B 
把 A 以 '*' 切割成字符串数组
如果这个数组顺序的包含于 B 中 即 A 包含 B
当然这个A切割成的字符串数组中可能会包含 '?' 字符
如果都是'?'代表字母或数字的话 大不了生成对应的 36 个新字符串去匹配
用贪心的思想 尽量让匹配的位置最靠近上一个字符串匹配的位置
如果'?'也匹配汉字等其他字符 就把这个字符串再次切割与B中匹配让匹配的位置中只隔一个字符即可

作者: keeya0416   发布时间: 2011-11-01

B也包含*和?

作者: rcbblgy   发布时间: 2011-11-01

?代表一个字符么

作者: fenix124   发布时间: 2011-11-01

假定*代表任意长度字符,?代表任意一个字符,貌似可以用类似递推的方式来做。

f(i,j) = {true,false}表示两个字符串前面长度分别为i,j能否匹配

然后按字符是*,?,或者普通字母之类的分情况讨论,由已经解决的问题推出。

作者: fenix124   发布时间: 2011-11-01

热门下载

更多