gpt4 book ai didi

c++ - 如何测试一个序列是否符合给定模式中的另一个序列?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:31:47 24 4
gpt4 key购买 nike

下面描述的算法叫什么名字?

描述:

如何测试一个序列是否符合给定模式中的另一个序列?

例如:

The pattern: the number appears in the same order.


bool isOrderValid(vector<int>& mainVec, vector<int>& subVec) {
// how to implement this function?
}

test#1: isOrderValid({1, 2, 3, 4}, {2, 4}); // should return true
test#2: isOrderValid({1, 2, 3, 4}, {4, 2}); // should return false

解释:

测试 #1:子序列为 2、4;在主序列中,2出现在4之前,所以顺序是正确的。

测试 #2:子序列是 4, 2;但是在主序列中,4出现在2之后,所以顺序不正确。

注意:两个数组中可能存在重复项。例如:

isOrderValid({3, 6, 3, 1, 2, 3}, {3, 1, 3}); // should return true

最佳答案

这可以很简单地实现(我在这里使用函数对象):

class base_pattern_matcher{
public:
virtual bool operator()(const vector<int>& a , const vector<int>& b) = 0;
}

class in_order_pattern_matcher : public base_pattern_matcher{
public:
bool operator()(const vector<int>& a , const vector<int>& b){
vector<int>::iterator iter_a = a.begin() , iter_b = b.begin();

while(iter_b != b.end() && iter_a != a.end()){
if(*iter_b == *iter_a)
//we found an occurence in a that matches the searched element in b
//--> search for the next element
iter_b++;

//check if the next element matches the searched element
iter_a++;
}

//we have found all elements of b in the given order
return iter_b == b.end();
};
}

isOrderValid(const vector<int>& a , const vector<int>& b , const base_pattern_matcher& matcher){
return matcher(a , b);
}

关于c++ - 如何测试一个序列是否符合给定模式中的另一个序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32797135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com