@@ -45,7 +45,7 @@ public double Similarity(string s1, string s2)
4545 return 1.0d ;
4646 }
4747
48- var matches = GetMatchList ( s1 , s2 ) ;
48+ var matches = GetMatchList ( s1 . AsSpan ( ) , s2 . AsSpan ( ) ) ;
4949 int sumOfMatches = 0 ;
5050
5151 foreach ( var match in matches )
@@ -68,40 +68,40 @@ public double Distance(string s1, string s2)
6868 return 1.0d - Similarity ( s1 , s2 ) ;
6969 }
7070
71- private static IList < string > GetMatchList ( string s1 , string s2 )
71+ private static IList < string > GetMatchList ( ReadOnlySpan < char > s1 , ReadOnlySpan < char > s2 )
7272 {
7373 var list = new List < string > ( ) ;
7474 var match = FrontMaxMatch ( s1 , s2 ) ;
7575
7676 if ( match . Length > 0 )
7777 {
78- var frontSource = s1 . Substring ( 0 , s1 . IndexOf ( match , StringComparison . Ordinal ) ) ;
79- var frontTarget = s2 . Substring ( 0 , s2 . IndexOf ( match , StringComparison . Ordinal ) ) ;
78+ var frontSource = s1 . Slice ( 0 , s1 . IndexOf ( match , StringComparison . Ordinal ) ) ;
79+ var frontTarget = s2 . Slice ( 0 , s2 . IndexOf ( match , StringComparison . Ordinal ) ) ;
8080 var frontQueue = GetMatchList ( frontSource , frontTarget ) ;
8181
82- var endSource = s1 . Substring ( s1 . IndexOf ( match , StringComparison . Ordinal ) + match . Length ) ;
83- var endTarget = s2 . Substring ( s2 . IndexOf ( match , StringComparison . Ordinal ) + match . Length ) ;
82+ var endSource = s1 . Slice ( s1 . IndexOf ( match , StringComparison . Ordinal ) + match . Length ) ;
83+ var endTarget = s2 . Slice ( s2 . IndexOf ( match , StringComparison . Ordinal ) + match . Length ) ;
8484 var endQueue = GetMatchList ( endSource , endTarget ) ;
8585
86- list . Add ( match ) ;
86+ list . Add ( match . ToString ( ) ) ;
8787 list . AddRange ( frontQueue ) ;
8888 list . AddRange ( endQueue ) ;
8989 }
9090
9191 return list ;
9292 }
9393
94- private static string FrontMaxMatch ( string s1 , string s2 )
94+ private static ReadOnlySpan < char > FrontMaxMatch ( ReadOnlySpan < char > s1 , ReadOnlySpan < char > s2 )
9595 {
9696 int longest = 0 ;
97- var longestSubstring = "" ;
97+ ReadOnlySpan < char > longestSubstring = ReadOnlySpan < char > . Empty ;
9898
9999 for ( int i = 0 ; i < s1 . Length ; ++ i )
100100 {
101101 for ( int j = i + 1 ; j <= s1 . Length ; ++ j )
102102 {
103- var substring = s1 . Substring ( i , j - i ) ;
104- if ( s2 . Contains ( substring ) && substring . Length > longest )
103+ var substring = s1 . Slice ( i , j - i ) ;
104+ if ( s2 . Contains ( substring , StringComparison . Ordinal ) && substring . Length > longest )
105105 {
106106 longest = substring . Length ;
107107 longestSubstring = substring ;
0 commit comments