【发布时间】:2020-08-19 04:18:45
【问题描述】:
我有两个长度分别为m和n的字符串数组,其中的字符串长度均为x,我想找到包含最多常见字母的最佳匹配对:
在一个简单的情况下,只需考虑这两个字符串
Sm = [AAAA, BBBB]
Sn = [ABBA, AAAA, AAAA, CCCC]
预期结果(匹配 2 对,单独留下 2 个字符串):
第 1 对:AAAA -> AAAA 因为得分 4
第 2 对:BBBB -> ABBA 因为分数 2
Sn 中单独存在的字符串:
-
AAAA因为Sm中的相同字符串已经匹配 -
CCCC因为无法匹配任何
分数矩阵:
我目前的方法(慢):
- 获取字符串长度
x,这是最大分数(所有字母相同的情况)-在这种情况下为4 - 蛮力比较
mxn次生成上面的分数矩阵-在这种情况下是2*4次 - 从
x循环到1:(在这种情况下,它从4循环到1)- 遍历分数矩阵并弹出分数为
x的字符串对
- 遍历分数矩阵并弹出分数为
- 将剩余的未配对字符串或带有
0分数的字符串标记为单独
问题:
在生成分数矩阵时,我当前的方法使用 O(mn) 很慢(x 不会很大,所以我在这里假设为 const)。
有没有比 O(mn) 复杂度表现更好的算法?
【问题讨论】:
-
我可以知道为什么要投反对票吗?
-
更新了标题。它实际上更多的是与数组比较而不是字符串比较相关。
-
字符串 255 中使用了多少个不同的符号/字母? 26? 3?字符串的最大长度?
x有多大? -
@chux-ReinstateMonica 实际上,我试图比较 2 个 csv 文件,但在这种情况下,我只是将情况简化为单个字母。假设字母只有字母数字,x 最大为 100,那么策略是什么?谢谢
标签: algorithm string-comparison