如何在C ++中有效地比较两种模式

时间:2012-04-05 12:59:19

标签: c++ algorithm pattern-matching

pattern 1: [(0,1)(2,4)] => [(2,3)(3,4)(4,5)] 
pattern 2: [(0,1)] => [(2,3)(4,5)]

在我的定义中pattern 2pattern 1的子模式,因为(0,1) pattern 2 (0,1)(2,4)包含pattern 1 (2,3)(4,5)pattern 2 (2,3)(3,4)(4,5)的{​​{1}}包含pattern 1的1}}。

实施此比较的​​适当且有效的算法是什么?感谢:)

2 个答案:

答案 0 :(得分:0)

从概念上讲:计算pattern1和pattern2的Longest Common Subsequence,并检查它是否等于pattern2。

实际上:您想测试pattern2是否是pattern1的子字符串。通过对两个字符串进行单次扫描,可以更快地完成此操作。

答案 1 :(得分:0)

琐碎:pattern2的每个字符都出现在pattern1中,并且顺序相同。前面的简单检查是长度(pattern2)< = length(pattern1),因此这是O(长度(pattern1))。这是最佳的,因为必须考虑所有字符。

相关问题