private static int SimilarString(string s, int sLen, string t, int tLen) { SimilarityUnit similar = SimilarStringHelper(s, sLen, t, tLen); int sum = similar.Maximum; if (sum != 0) { if (similar.Position1 != 0 && similar.Position2 != 0) { sum += SimilarString(s, similar.Position1, t, similar.Position2); } if ((similar.Position1 + similar.End1 < sLen) && (similar.Position2 + similar.End2 < sLen)) { sum += SimilarString(s.Substring(similar.Position1 + similar.End1), s.Length - similar.Position1 - similar.End1, t.Substring(similar.Position2 + similar.End2), t.Length - similar.Position2 - similar.End2); } } return(sum); }
private static SimilarityUnit SimilarStringHelper(string txt1, int len1, string txt2, int len2) { SimilarityUnit unit = new SimilarityUnit(); unit.Maximum = 0; int j1 = 0, j2 = 0, l = 0; for (int i1 = 0; i1 < len1; i1++) { for (int i2 = 0; i2 < len2; i2++) { l = 0; j1 = 0; j2 = 0; while ((i1 + j1 < len1) && (i2 + j2 < len2)) { char ch1 = txt1[i1 + j1]; j1++; char ch2 = txt2[i2 + j2]; j2++; if (ch1 != ch2) { j1--; j2--; break; } l++; } if (l > unit.Maximum) { unit.Maximum = l; unit.Position1 = i1; unit.End1 = j1; unit.Position2 = i2; unit.End2 = j2; } } } return(unit); }