using
System;
using
System.Collections.Generic;
class
GFG
{
public
static
string
Reverse(
string
Input)
{
char
[] charArray = Input.ToCharArray();
string
reversedString = String.Empty;
for
(
int
i = charArray.Length - 1; i > -1; i--)
{
reversedString += charArray[i];
}
return
reversedString;
}
public
static
int
partCount(
string
str1,
string
str2) {
HashSet<String>
set
=
new
HashSet<String>();
string
temp =
""
;
int
l1 = str1.Length, l2 = str2.Length;
for
(
int
i = 0; i < l2; i++) {
temp += str2[i];
set
.Add(temp);
}
temp =
""
;
for
(
int
i = l2 - 1; i >= 0; i--) {
temp += str2[i];
temp = Reverse(temp);
set
.Add(temp);
temp = Reverse(temp);
}
int
[] dp =
new
int
[str1.Length + 1];
for
(
int
j=0; j<dp.Length;j++)
{
dp[j] = -1;
}
dp[0] = 0;
for
(
int
i = 0; i < l1; i++) {
for
(
int
j = 1; j <= l1 - i; j++) {
if
(
set
.Contains(str1.Substring(i, j))) {
if
(dp[i] == -1) {
continue
;
}
if
(dp[i + j] == -1) {
dp[i + j] = dp[i] + 1;
}
else
{
dp[i + j] = Math.Min(dp[i + j], dp[i] + 1);
}
}
}
}
return
dp[str1.Length];
}
static
public
void
Main(String[] args)
{
string
str =
"GEEKSFORGEEKS"
, wrd =
"SFORGEEK"
;
Console.WriteLine(partCount(str, wrd));
}
}