#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
int n,m;
cin>>n>>m;
string s1,s2;
cin>>s1>>s2;
swap(s1,s2);
int dp[s1.size()][s2.size()];
for(int i=0;i<s1.size();i++)
for(int j=0;j<s2.size();j++)
dp[i][j]=1e9;
int ans=LLONG_MAX;
for(int i=0;i<s2.size();i++)
{
if(s2[i]==s1[0])
{
dp[0][i]=0;
if(s1.size()==1)
ans=0;
}
}
if(ans==0)
{
cout<<0;
return 0;
}
for(int i=1;i<s1.size();i++)
{
ans=LLONG_MAX;
for(int j=0;j<s2.size();j++)
{
if(s2[j]==s1[i])
{
if((j>0&&s2[j-1]==s1[i-1])||(j<s2.size()-1&&s2[j+1]==s1[i-1]))
{
for(int k=0;k<s2.size();k++)
{
if(dp[i-1][k]<1e9)
{
if(j>0&&s2[j-1]==s1[i-1])
{
dp[i][j]=min(dp[i][j],dp[i-1][k]+1+abs(k-(j-1)));
}
if(j<s2.size()-1&&s2[j+1]==s1[i-1])
{
dp[i][j]=min(dp[i][j],dp[i-1][k]+1+abs(k-(j+1)));
}
}
}
}
}
ans=min(ans,dp[i][j]);
//cout<<dp[i][j]<<" ";
}
//cout<<endl;
}
if(ans<1e9)
cout<<ans;
else
cout<<-1;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |