C++ 如何在C++;

C++ 如何在C++;,c++,algorithm,pattern-matching,C++,Algorithm,Pattern Matching,在我的定义中,模式2是模式1的一个子模式,因为模式2的(0,1)包含在模式1的(0,1)(2,4)中,而模式2的(2,3)(4,5)包含在模式1的(2,3)(3,4,5)中 实现这种比较的合适和有效的算法是什么?谢谢:)概念上:计算pattern1和pattern2的值,并检查它是否等于pattern2 实际上:您想测试pattern2是否是pattern1的子字符串。通过对两个字符串进行一次扫描,可以更快地完成此操作 平凡:pattern2的每个字符都以pattern1的顺序出现。前面一个简单

在我的定义中,
模式2
模式1
的一个子模式,因为
模式2的
(0,1)
包含在
模式1的
(0,1)(2,4)
中,而
模式2的
(2,3)(4,5)
包含在
模式1的
(2,3)(3,4,5)

实现这种比较的合适和有效的算法是什么?谢谢:)

概念上:计算pattern1和pattern2的值,并检查它是否等于pattern2


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

平凡:pattern2的每个字符都以pattern1的顺序出现。前面一个简单的检查是长度(模式2),典型的方法是分别比较左侧和右侧。对于每一面,对列表进行排序,并进行平行行走以找到匹配的项目。但这并不是一个C++特有的问题。什么样的数据结构包含这些模式?这是否正确:如果两个元素相等,则一对“匹配”另一对。如果L1中的每一对都与L2中的另一个唯一对匹配(不一定在相同序列中),则对列表L1是另一个对列表L2的“子列表”。如果P1中的每个列表都是P2中相应列表的子列表,则模式P1是P2的“子模式”。它不是子字符串,请参见
(2,3)(4,5)
pattern 1: [(0,1)(2,4)] => [(2,3)(3,4)(4,5)] 
pattern 2: [(0,1)] => [(2,3)(4,5)]