String 在Matlab中计算变长字符串间的汉明距离

String 在Matlab中计算变长字符串间的汉明距离,string,matlab,hamming-distance,variable-length,String,Matlab,Hamming Distance,Variable Length,我想在Matlab中计算两个可变长度字符串之间的汉明距离。对于固定长度字符串,以下语法解决了我的问题: str1 = 'abcde'; str2 = 'abedc'; sum(str1 ~= str2) ans = 2 如何有效地为可变长度字符串执行此操作 谢谢大家! 编辑:因为这是一个合理的问题:对于每个字符,一个字符串比另一个字符串长,汉明距离应该增加。比如说 str1 = 'abcdef'; str2 = 'abc'; 答案应该是3。这里有一个方法: str1 = 'abcdef'

我想在Matlab中计算两个可变长度字符串之间的汉明距离。对于固定长度字符串,以下语法解决了我的问题:

str1 = 'abcde';
str2 = 'abedc';

sum(str1 ~= str2)

ans = 2
如何有效地为可变长度字符串执行此操作

谢谢大家!

编辑:因为这是一个合理的问题:对于每个字符,一个字符串比另一个字符串长,汉明距离应该增加。比如说

str1 = 'abcdef';
str2 = 'abc';
答案应该是3。这里有一个方法:

str1 = 'abcdef';
str2 = 'abc';
clear t
t(1,:) = str1+1; % +1 to make sure there are no zeros
t(2,1:numel(str2)) = str2+1; % if needed, this right-pads with zero or causes t to grow
result = sum(t(1,:)~=t(2,:));

尽管@LuisMendo answer适用于给定示例(这可能对您来说已经足够好了),但它不适用于此示例:

str1 = 'abcdef';
str2 = 'bcd';
clear t
t(1,:) = str1+1; % +1 to make sure there are no zeros
t(2,1:numel(str2)) = str2+1; % if needed, this right-pads with zero or causes t to grow
result = sum(t(1,:)~=t(2,:)) % result = 6

以确保即使较短的字符串出现在较长的字符串的中间,也应该检查所有选项。一种方法是:

str1 = 'bcd';
str2 = 'abcdef';
len1 = length(str1);
len2 = length(str2);
n = len2 - len1;
str1rep_temp = repmat(str1,[1,n+1]);
str1rep = -ones(n+1,len2);
str1rows = repmat(1:n+1,[len1,1]);
str1cols = bsxfun(@plus,(1:len1)',0:n);
str1idxs = sub2ind(size(str1rep),str1rows(:),str1cols(:));
str1rep(str1idxs) = str1rep_temp;
str2rep = double(repmat(str2,[n+1, 1]));
res = min(sum(str1rep ~= str2rep,2)); % res = 3

您的代码适用于可变长度字符串。或者你的意思是一个字符串可以比另一个长?如果是这样的话,你如何定义这种情况下的汉明距离?好问题,我会为这个问题添加一个解释。谢谢,这很有效!我不知道矩阵可以用这样一个简单的语法增长!好吧,我甚至没有想过这样做,但无论如何,这是一个有趣的方法。也许我以后会试试,谢谢!