Переписать код с Pascal (работа со строками) - C#
Формулировка задачи:
Function MaxBorder(S:String):Word;
Var i, j, br, n:Word;
Begin
n:=Length(S);{Вычисляем длину строки W.}
br:=0;
For i:=1 To n-1 Do Begin {Цикл по длине грани.}
j:=n-i+1;
While (j<=t) And (S[i+j-n]=S[j]) Do j:=j+1; {Префикс и суффикс длины i совпадают?}
If j=n+1 Then br:=i;
End;
MaxBorder:=br;
End;
Procedure MaxBorderArray(S:String); {Массив br глобальный.}
Var i,n,t:Word;
Begin
n:=Length(S);
br[1]:=0;
For i:=2 To n Do
br[i]:=MaxBorder(Copy(S,1,i)); {«Вырезаем» из S подстроку длины i, начиная с первого символа.}
End;static void MaxBorderArray(string mba)
{
masbr[0] = 0;
for (int i = 2; i < mba.Length; i++)
masbr[i] = MaxBorder(mba.Substring(0,i));
}Решение задачи: «Переписать код с Pascal (работа со строками)»
textual
Листинг программы
static int MaxBorder(string S)
{
int br = 0, j, t, n = S.Length;
t = n - 1;
for (int i = 0; i < n - 1; i++)
{
j = t;
while ((j < n) && (S[i + j - (n - 1)] == S[j]))
j++;
if (j == n) br = i + 1;
t--;
}
return br;
}
static void MaxBorderArray(string S)
{
masbr[0] = 0;
for (int i = 1; i < S.Length; i++)
masbr[i] = MaxBorder(S.Substring(0,i+1));
}