Problem:
Score : 200 points

Problem Statement

Given are two strings S and T.

Let us change some of the characters in S so that T will be a substring of S.

At least how many characters do we need to change?

Here, a substring is a consecutive subsequence. For example, xxx is a substring of yxxxy, but not a substring of xxyxx.

Constraints

The lengths of S and T are each at least 1 and at most 1000.

The length of T is at most that of S.

S and T consist of lowercase English letters.

Input

Input is given from Standard Input in the following format:

S
T

Output

Print the minimum number of characters in S that need to be changed.

Sample Input 1

cabacc
abc

Sample Output 1

1

For example, changing the fourth character a in S to c will match the second through fourth characters in S to T.

Since S itself does not have T as its substring, this number of changes - one - is the minimum needed.

Sample Input 2

codeforces
atcoder

Sample Output 2

6

Solution in C# (.NET Core 3.1.201) (judge verdict: Wrong Answer)

using System;
using static System.Console;
using System.Linq;

namespace AC
{
   public class shiokara
   {
      static void Main(string[] args)
      {
         var S = ReadLine();
         var T = ReadLine();
         int distance = T.Length;
         string tmp;
         int tmpdis;
         for(int i = 0; i < S.Length - T.Length + 1; i++){
             tmp = S.Substring(i, T.Length);
             tmpdis = CalcLevenshteinDistance(tmp, T);
             if(distance > tmpdis) distance = tmpdis;
         }
         WriteLine(distance);
      }

      private static int  CalcLevenshteinDistance(string a, string b)
      {
          if (String.IsNullOrEmpty(a) && String.IsNullOrEmpty(b))
          {
              return 0;
          }
          if (String.IsNullOrEmpty(a)) 
          {
              return b.Length;
          }
          if (String.IsNullOrEmpty(b))
          {
              return a.Length;
          }
          int  LengthA   = a.Length;
          int  LengthB   = b.Length;
          var  distances = new int[LengthA + 1, LengthB + 1];
          for (int i = 0;  i <= LengthA;  distances[i, 0] = i++);
          for (int j = 0;  j <= LengthB;  distances[0, j] = j++);
          for (int i = 1;  i <= LengthA;  i++)
            for (int j = 1;  j <= LengthB;  j++)
            {
                int  cost = b[j - 1] == a[i - 1] ? 0 : 1;
                distances[i, j] = Math.Min(
                    Math.Min(distances[i - 1, j] + 1, distances[i, j - 1] + 1),
                    distances[i - 1, j - 1] + cost
                );
            }
          return distances[LengthA, LengthB];
      }
   }
}