做法:固定住S2串的位置,然后从S2的每i个位置找S1串中与i位置对应的字符,找到了,与前面的交换(冒泡一次)。
蒟蒻……
AC代码:
#include<bits/stdc++.h>
#define rep(i,s,t) for(int i = (int)(s); i <= (int)(t); i++)
#define rev(i,t,s) for(int i = (int)(t); i >= (int)(s); i--)
#define pb(x) push_back(x)
#define all(x) x.begin(),x.end()
#define sz(x) (int)(x).size()
using namespace std;
typedef long long ll;
const int mod = 1e9+7;
const double PI = 4*atan(1.0);
const int maxn = 1e5+5;
const int maxm = 2e5+5;
const int inf = 0x3f3f3f3f;
int ans[maxn];
int main()
{
#ifdef LOCAL_FILE
freopen("in.txt","r",stdin);
#endif // LOCAL_FILE
ios_base::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int n;
cin>>n;
char s1[105];
char s2[105];
for(int i=1;i<=n;i++)
cin>>s1[i];
s1[n+1] = '\0';
for(int i=1;i<=n;i++)
cin>>s2[i];
s2[n+1] = '\0';
// cout<<s1+1<<endl;
// cout<<s2+1<<endl;
int i = 1;
int j,k,flag;
k = flag = 0;
while(i<=n)
{
for(j=i;j<=n;j++)
if(s2[i] == s1[j])
break;
if(j>=1 && j<=n)
{
if(j!=i)
{
ans[k++] = j-1;
swap(s1[j],s1[j-1]);
if(s1[i] == s2[i]) i++;
}
else
i++;
}
else
{
flag = 1;
break;
}
}
if(!flag)
{
cout<<k<<endl;
// cout<<s1+1<<endl;
// cout<<s2+1<<endl;
for(int i=0;i<k;i++)
{
cout<<ans[i]<<" ";
}
}
else cout<<-1<<endl;
return 0;
}