Input= 'DA EA DA BD FA ED GE AA CA BB CC FB BC CB CF'
如何删除上述输入中的重复对并删除具有相同字符的对?在这种情况下,应该删除的对是:第二个'DA','AA','BB','CC'。
预期输出应为:
Output= 'DA EA BD FA ED GE CA FB BC CB CF'
答案 0 :(得分:2)
使用strsplit
分隔字符串,使用空格字符作为分隔符,然后使用带有'stable'
标记的unique
以确保删除重复项并确保唯一字符串在相同的订单。这将删除重复的字符串,但不会删除所有包含相同字符的字符串。为此,我们循环遍历每个字符串并检查连续字符之间的差异是否都等于0.我们在每个字符串上使用diff
并结合all
来执行此操作为了我们。如果所有连续差异都等于0,我们将从拆分字符串中筛选出这些差异。之后,我们使用strjoin
加入所有字符串:
%// Input string
s = 'DA EA DA BD FA ED GE AA CA BB CC FB BC CB CF';
%// Split string up into cells based on spaces
st = strsplit(s, ' ');
%// Filter out duplicate strings
st = unique(st, 'stable');
%// Find split strings that all have the same characters
f = cellfun(@(x) all(diff(x) == 0), st);
%// Remove from the list
st2 = st(~f);
%// Join the remaining strings back
sf = strjoin(st2, ' ');
sf
是最终输出。在这种情况下,我们得到:
sf =
DA EA BD FA ED GE CA FB BC CB CF
上述方法的好处是空格之间的字符串可以是任意大小 - 每个字符串不必只有两个字符。
答案 1 :(得分:1)
这适合我。
Input= 'DA EA DA BD FA ED GE AA CA BB CC FB BC CB CF'
foo = reshape([Input,' '], 3, 15)'
foo(foo(:,1)==foo(:,2),:)=''
bar = unique(foo,'rows','stable')
reshape(bar', 1, numel(bar))