LanguageNameSearch: Optimize levenshteinDistance
1. Do string comparison for equality early in the method so that we can do early return if it passes. 2. Move the zero length check for string up for early return. This may not have any significant change in performance though. Change-Id: I86bdd612a4a31c5ebfac6bcd7687b829acc69cda
This commit is contained in:
@@ -105,16 +105,16 @@ class LanguageNameSearch {
|
|||||||
* @return int
|
* @return int
|
||||||
*/
|
*/
|
||||||
public static function levenshteinDistance( $str1, $str2 ) {
|
public static function levenshteinDistance( $str1, $str2 ) {
|
||||||
|
if ( $str1 === $str2 ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
$length1 = mb_strlen( $str1, 'UTF-8' );
|
$length1 = mb_strlen( $str1, 'UTF-8' );
|
||||||
$length2 = mb_strlen( $str2, 'UTF-8' );
|
$length2 = mb_strlen( $str2, 'UTF-8' );
|
||||||
if ( $length1 < $length2 ) {
|
|
||||||
return self::levenshteinDistance( $str2, $str1 );
|
|
||||||
}
|
|
||||||
if ( $length1 === 0 ) {
|
if ( $length1 === 0 ) {
|
||||||
return $length2;
|
return $length2;
|
||||||
}
|
}
|
||||||
if ( $str1 === $str2 ) {
|
if ( $length1 < $length2 ) {
|
||||||
return 0;
|
return self::levenshteinDistance( $str2, $str1 );
|
||||||
}
|
}
|
||||||
$prevRow = range( 0, $length2 );
|
$prevRow = range( 0, $length2 );
|
||||||
for ( $i = 0; $i < $length1; $i++ ) {
|
for ( $i = 0; $i < $length1; $i++ ) {
|
||||||
|
|||||||
Reference in New Issue
Block a user