gpt4 book ai didi

c++ - 查找字符串差异的位运算

转载 作者:可可西里 更新时间:2023-11-01 18:41:19 25 4
gpt4 key购买 nike

我的以下字符串试图找出两个字符串之间的差异。但是它迭代字符串的长度时速度非常慢:

#include <string>
#include <vector>
#include <iostream>
using namespace std;


int hd(string s1, string s2) {
// hd stands for "Hamming Distance"
int dif = 0;

for (unsigned i = 0; i < s1.size(); i++ ) {
string b1 = s1.substr(i,1);
string b2 = s2.substr(i,1);

if (b1 != b2) {
dif++;
}
}

return dif;
}

int main() {

string string1 = "AAAAA";
string string2 = "ATATT";
string string3 = "AAAAA";

int theHD12 = hd(string1,string2);
cout << theHD12 << endl;

int theHD13 = hd(string1,string3);
cout << theHD13 << endl;
}

是否有快速的替代方法来做到这一点?在 Perl 中我们可以有以下方法:

sub hd {
return ($_[0] ^ $_[1]) =~ tr/\001-\255//;
}

这比迭代位置快得多。

我想知道它在 C++ 中的等价物是什么?

最佳答案

尝试将 for 循环替换为:

for (unsigned i = 0; i < s1.size(); i++ ) {
if (b1[i] != b2[i]) {
dif++;
}
}

这应该会快很多,因为没有创建新的字符串。

关于c++ - 查找字符串差异的位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/557170/

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