假设我有一个字符串列表,其中每个字符串都是
对于这些字符串中的每一个,我想识别字符串中字符的位置,使字符串唯一.
所以对于三个字符串的列表
abcd
abcc
bbcb
Run Code Online (Sandbox Code Playgroud)
对于第一个字符串,我想识别第四个位置d中的字符,因为d没有出现在任何其他字符串的第4个位置.
对于第二个字符串,我想识别第四个位置c中的字符.
对于第三个字符串,我想识别第一个位置b中的字符和第四个位置的字符,也是b.
这可以简洁地表示为
abcd -> ...d
abcc -> ...c
bbcb -> b..b
Run Code Online (Sandbox Code Playgroud)
如果您考虑相同的问题,但使用二进制数列表
0101
0011
1111
Run Code Online (Sandbox Code Playgroud)
那么我想要的结果就是
0101 -> ..0.
0011 -> .0..
1111 -> 1...
Run Code Online (Sandbox Code Playgroud)
保持二进制主题我可以使用XOR来识别哪个位在两个二进制数内是唯一的
0101 ^ 0011 = 0110
Run Code Online (Sandbox Code Playgroud)
我可以解释为这意味着在这种情况下,第二和第三位(从左到右读取)在这两个二进制数之间是唯一的.这种技术可能是红鲱鱼,除非它以某种方式可以扩展到更大的列表.
蛮力方法是依次查看每个字符串,并为每个字符串迭代列表中其余字符串的垂直切片.
所以列表
abcd
abcc
bbcb
Run Code Online (Sandbox Code Playgroud)
我会先说
abcd
Run Code Online (Sandbox Code Playgroud)
并迭代垂直切片
abcc
bbcb
Run Code Online (Sandbox Code Playgroud)
这些垂直切片将在哪里
a | b | c | c
b | b | c | b
Run Code Online (Sandbox Code Playgroud)
或以列表形式,"ab","bb","cc","cb". …