wip: club
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
package fr.titionfire.ffsaf.utils;
|
||||
|
||||
public class StringSimilarity {
|
||||
|
||||
public static int similarity(String s1, String s2) {
|
||||
String longer = s1, shorter = s2;
|
||||
if (s1.length() < s2.length()) {
|
||||
longer = s2;
|
||||
shorter = s1;
|
||||
}
|
||||
int longerLength = longer.length();
|
||||
if (longerLength == 0) {
|
||||
return 1;
|
||||
}
|
||||
return editDistance(longer, shorter);
|
||||
|
||||
}
|
||||
|
||||
public static int editDistance(String s1, String s2) {
|
||||
s1 = s1.toLowerCase();
|
||||
s2 = s2.toLowerCase();
|
||||
|
||||
int[] costs = new int[s2.length() + 1];
|
||||
for (int i = 0; i <= s1.length(); i++) {
|
||||
int lastValue = i;
|
||||
for (int j = 0; j <= s2.length(); j++) {
|
||||
if (i == 0)
|
||||
costs[j] = j;
|
||||
else {
|
||||
if (j > 0) {
|
||||
int newValue = costs[j - 1];
|
||||
if (s1.charAt(i - 1) != s2.charAt(j - 1))
|
||||
newValue = Math.min(Math.min(newValue, lastValue),
|
||||
costs[j]) + 1;
|
||||
costs[j - 1] = lastValue;
|
||||
lastValue = newValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (i > 0)
|
||||
costs[s2.length()] = lastValue;
|
||||
}
|
||||
return costs[s2.length()];
|
||||
}
|
||||
|
||||
public static void printSimilarity(String s, String t) {
|
||||
System.out.printf(
|
||||
"%d is the similarity between \"%s\" and \"%s\"%n", similarity(s, t), s, t);
|
||||
}
|
||||
|
||||
/*public static void main(String[] args) {
|
||||
printSimilarity("Xavier Login", "Xavier Lojin");
|
||||
printSimilarity("Xavier Login", "Xavier ogin");
|
||||
printSimilarity("Xavier Login", "avier Login");
|
||||
printSimilarity("Xavier Login", "xavier login");
|
||||
printSimilarity("Xavier Login", "Xaviér Login");
|
||||
printSimilarity("Xavier Gomme Login", "Xavier Login");
|
||||
printSimilarity("Xavier Login", "Xavier Gomme Login");
|
||||
printSimilarity("Xavier Login", "Xavier");
|
||||
printSimilarity("Xavier Login", "Login");
|
||||
printSimilarity("Jule", "Julles");
|
||||
printSimilarity("Xavier", "Xaviér");
|
||||
printSimilarity("Xavier", "xavvie");
|
||||
}*/
|
||||
}
|
||||
Reference in New Issue
Block a user