Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }