From 3bf736126279f74eb583b40f9f02842b312c8ea4 Mon Sep 17 00:00:00 2001 From: Santhosh Thottingal Date: Thu, 30 Nov 2017 16:38:41 +0530 Subject: [PATCH] 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 --- data/LanguageNameSearch.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/data/LanguageNameSearch.php b/data/LanguageNameSearch.php index d12fb5ff..06840f12 100644 --- a/data/LanguageNameSearch.php +++ b/data/LanguageNameSearch.php @@ -105,16 +105,16 @@ class LanguageNameSearch { * @return int */ public static function levenshteinDistance( $str1, $str2 ) { + if ( $str1 === $str2 ) { + return 0; + } $length1 = mb_strlen( $str1, 'UTF-8' ); $length2 = mb_strlen( $str2, 'UTF-8' ); - if ( $length1 < $length2 ) { - return self::levenshteinDistance( $str2, $str1 ); - } if ( $length1 === 0 ) { return $length2; } - if ( $str1 === $str2 ) { - return 0; + if ( $length1 < $length2 ) { + return self::levenshteinDistance( $str2, $str1 ); } $prevRow = range( 0, $length2 ); for ( $i = 0; $i < $length1; $i++ ) {