我希望匹配字符串并按以下方式获得分数,
string 1: 4556677, string 2: 2556677, score: 0
string 1: 123345873009, string 2: 123345873112, score: 9
string 1: 22334567, string 2: 22334500, score: 6
所以分数从左到右表示共同的前n位。
我有一个100K字符串1和30M字符串2的列表,我想过滤所有对(字符串1和2),得分大于'x'。
是否有可用于执行此任务的算法而不是残酷的力顺序匹配?我有表存储在apache hive / hbase中,并希望在spark或java mapreduce中实现该方法。非常感谢任何帮助。
答案 0 :(得分:0)
我得出结论,你的“得分”代表字符串不同的最左边的字符位置。
没关系“mapreduce”,简单的Jane Java可以很容易地做到这一点。
**
public int score(String string1,String string2){
char sbuf1 [] = string1.toCharArray();
char sbuf2 [] = string2.toCharArray();int complen = sbuf1.length;
if(sbuf2.length< complen){
complen = sbuf2.length;
}
对于( int i = 0;我< complen;我++){
if(sbuf1 [i]!= sbuf2 [i]){
返回 I;
}
}
返回-1; // 表示在一根弦用尽之前没有检测到不匹配 }
**