版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/88072241
http://codeforces.com/contest/1015/problem/B
n 表示 字符串的长度
然后是两个字符串,每一次只能交换相邻的两个,如果选择第i个字符的话,只能交换第i个和第i+1个
然后输出每一次交换选定的位置
暴力,模拟,queue(数组也可以)
#include <iostream>
#include <string>
#include <algorithm>
#include <queue>
using namespace std;
int main ()
{
queue<int> q;
int n,i,j,k;
string s1,s2;
cin >> n >> s1 >> s2;
string ans1=s1,ans2=s2;
sort(ans1.begin(),ans1.end());
sort(ans2.begin(),ans2.end());
if(ans1!=ans2)
{
cout << "-1";
return 0;
}
for(i=0;i<n;i++)
{
if(s1[i]!=s2[i])
{
for(j=i;j<n;j++)
{
if(s1[j]==s2[i])
{
for(k=j-1;k>=i;k--)
{
q.push(k+1);
char str=s1[k];
s1[k]=s1[k+1];
s1[k+1]=str;
}
break;
}
}
}
}
int flag = 0;
cout << q.size() << endl;
while(q.empty()!=1)
{
if(flag++)
cout << " ";
cout << q.front();
q.pop();
}
return 0;
}