题意 给两个字符串,通过和后面一个字符对掉顺序,得到第二个字符串和第一个相等,输出对调次数,按顺序输出对调的点
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=55;
char a[maxn],b[maxn];
int ch1[30],ch2[30];
int ans[10005];
int main()
{
int n;
int cnt=0;
while(scanf("%d",&n)!=EOF)
{
scanf("%s",b);
scanf("%s",a);
memset(ans,0,sizeof(ans));
memset(ch1,0,sizeof(ch1));
memset(ch2,0,sizeof(ch2));
for(int i=0;i<n;i++)
{
ch1[a[i]-'a']++;
ch2[b[i]-'a']++;
}
int flag=0;
for(int i=0;i<30;i++)
if(ch1[i]!=ch2[i])
{
flag=1;
printf("-1\n");
break;
}
if(flag)continue;
else
{
for(int i=0;i<n;i++)
{
if(a[i]==b[i])
continue;
else
{
for(int j=i;j<n;j++)
{
if(a[i]==b[j])
{
int r=j,l=i;
while(l<r)
{
ans[++cnt]=r;
r--;
char temp;
temp=b[r];
b[r]=b[r+1];
b[r+1]=temp;
}
break;
}
}
}
}
}
cout<<cnt<<endl;
for(int i=1;i<=cnt;i++)
{
if(i==1)cout<<ans[i];
else cout<<" "<<ans[i];
}
cout<<endl;
}
}