using
System;
class
Program {
static
int
GetMin(
int
x,
int
y,
int
z)
{
return
Math.Min(Math.Min(x, y), z);
}
static
int
EditDistance(
string
str1,
string
str2,
int
m,
int
n)
{
int
[] dp =
new
int
[n + 1];
for
(
int
j = 0; j <= n; j++) {
dp[j] = j;
}
for
(
int
i = 1; i <= m; i++) {
int
prev = dp[0];
dp[0] = i;
for
(
int
j = 1; j <= n; j++) {
int
temp = dp[j];
if
(str1[i - 1] == str2[j - 1]) {
dp[j] = prev;
}
else
{
dp[j]
= 1
+ GetMin(prev, dp[j], dp[j - 1]);
}
prev = temp;
}
}
return
dp[n];
}
static
void
MinimumSteps(
string
S,
int
N)
{
int
ans = Int32.MaxValue;
for
(
int
i = 1; i < N; i++) {
string
S1 = S.Substring(0, i);
string
S2 = S.Substring(i);
int
count = EditDistance(S1, S2, S1.Length,
S2.Length);
ans = Math.Min(ans, count);
}
Console.WriteLine(ans);
}
static
void
Main(
string
[] args)
{
string
S =
"aabb"
;
int
N = S.Length;
MinimumSteps(S, N);
}
}