【发布时间】:2020-06-28 18:00:33
【问题描述】:
我编写了一个 C++ 函数 hasMirrorTwice,它将两个整数数组 arr1 和 arr2 及其长度作为参数,并检查 arr1 是否包含 arr2 的所有元素以相反的顺序至少两次。下面是函数。我想知道是否有办法简化它?
bool hasMirrorTwice(int a1[], int a2[], int size1, int size2) {
int num_reps = 0;
bool contains = false;
for (int i = 0; i < size1; ++i) {
contains = false;
if (a1[i] == a2[size2 - 1]) {
contains = true;
for (int k = size2 - 2; k >= 0; --k) {
if (i + size2 - 1 - k >= size1 || a2[k] != a1[i + size2 - 1 - k]) {
contains = false;
break;
}
}
}
if (contains) {
++num_reps;
i += size2 - 2;
}
if (num_reps >= 2) {
return true;
}
}
return false;
}
在下面的main函数中,输出应该为真。
#include <iostream>
int main() {
int a4[] = {1,2,3,2,3,2};
int a5[] = {2,3,2};
std::cout << std::boolalpha << hasMirrorTwice(a4, a5, 6, 3)
<< std::endl;
}
【问题讨论】:
-
如果您想获得更好的性能,请尝试实现Knuth–Morris–Pratt algorithm,或者如果您想编写更少的代码,请在执行
std::reverse之后直接使用std::find。 -
您对该函数的调用实际上并未编译。另外,你为什么不使用
std::vector而不是数组? -
@cigien 抱歉。我修好了。