C++ 更快的字符数组比较
C++ Faster char array compare
我正在尝试做的是找到一种更快的方法来执行相同的程序,但执行速度更快。
#include <cstdio>
#include <cstring>
int main ()
{
int br=0, c, n, b, e, i, q, g;
char t[7000], a[7000];
scanf("%d" ,&n);
for (g=0; g<n; g++) // number of test cases
{
scanf ("%7000s",&t);
c=strlen(t);
scanf ("%7000s",&a);
b=strlen(a);
for (i=0; i<b; i++) // comparing them
{
for (q=0; q<c; q++)
{
if (a[i]==t[q] && a[i]!=' ' && t[q]!=' ')
{
br++;a[i]=' ';t[q]=' ';
}
}
}
printf("%d n", br);
br=0;
}
return 0;
}
<小时 />程序本身是这样做的:
第一个输入:测试用例数量
2nd:您必须为每个测试用例输入 A 数组和 B 数组
程序必须检查是否有来自 B 的任何常见字母与 A 匹配,如果有,则输出它们的数量。
Example input:
2
qwerty
abc
abcde
bcex
Output:
0
3
我需要的是让它运行得更快。任何帮助都值得赞赏。:)
最好对两个字符串中的每个字符进行哈希处理。每个字符对应一个 ASCII 值。将每个字符的计数存储在两个字符串的其他数组中。比较哈希数组。
将您的输入放在两个char
排序的容器中,例如 deques。然后执行设置交集并测量结果的大小。这应该会大大降低复杂性
编辑
使用用户输入修正排序的双端面的示例
void addChar2Deque(char newChar, std::deque<char> &sorted_cont) {
sorted_cont.insert(std::lower_bound(sorted_cont.begin(), sorted_cont.end(), newChar), newChar);
}
如果您只能在预取数据中输入输入,那么您可以对该数据进行排序,例如对于大小为 N 的char
数组
std::sort(prefetched_data, prefetched_data+N);
在任何情况下,您最终都会得到两个可以与std::set_intersection
进行比较的容器(deque 或 C 数组)
std::vector<char> result;
std::set_intersection(std::begin(cont1), std::end(cont1),
std::begin(cont2), std::end(cont2), std::back_inserter(result));
return result.size();
为了与带有C++标头的 C 代码的口头禅保持一致,这就是我提到的查找表方法。由此产生的复杂度为 O(N+M),其中 N 和 M 是各自字符串的长度。由于已成定局,每个字符串中的每个字符必须至少访问一次(在这种情况下不超过此),因此我有点放心地建议算法方面,如果不进入 asm bag-o-tricks,就很难做得更好。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <climits>
int main()
{
int n;
if (scanf("%d", &n) != 1 || n < 0)
return EXIT_FAILURE;
while (n-- >0)
{
char a[7000], b[7000];
if (scanf ("%7000s", a) == 1 && scanf ("%7000s", b) == 1)
{
unsigned short table[1 << CHAR_BIT] = {0};
unsigned int answer = 0;
const char *p;
for (p=b; *p; ++table[(unsigned char)*p++]);
for (p=a; *p; ++p)
{
if (table[(unsigned char)*p])
{
--table[(unsigned char)*p];
++answer;
}
}
printf("%un", answer);
}
}
return EXIT_SUCCESS;
}
相关文章:
- 比较字符数组
- 如何在C++中比较两个char数组
- 比较if语句中的数组值和int值
- 在这里,当我们比较 if(vc[i]==vc1[i]) 时,它是向量数组. 实际上比较的值是多少,
- 比较 c++ 中的字符数组
- 如何将字符串字符与结构数组进行比较?
- 将constexpr字节数组与缓冲区的一部分(指向数据的指针)进行比较
- 在C++中返回基元类型数组(Java比较)
- 谷歌测试比较指针数组的内容
- 比较嵌套 for 循环中的两个 wchar 数组?
- C++ 将二维数组索引与条件语句中的函数值进行比较
- 在 c++ 中比较不相等数组或字符串的方法
- 将子字符串与字符串数组进行比较的 IF 条件会在C++中产生错误
- 如何使用 for 循环来比较不同大小的数组
- 如何为映射和priority_queue编写比较器,其中元素是二维数组
- 比较/搜索数组中多个整数的最佳解决方案
- 从数组比较2个字符串时,程序崩溃
- C++ 更快的字符数组比较
- c++数组比较和移动?为什么苹果不动?
- 快速数组比较和替换最接近值的元素的算法.(跟踪点)