版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sugarbliss/article/details/81534274
题目链接:http://codeforces.com/contest/1015/problem/B
题意:输入两个长为n的字符串s和t,问s经过多少次变换后(只能相邻交换,即i与i+1交换)可以变成t,且最后输出i的下标
思路:直接暴力模拟交换就行了
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n; cin >> n;
string s, t, ss, tt;
vector <int> v;
cin >> s >> t;
ss = s; tt = t;
sort(ss.begin(),ss.end()); sort(tt.begin(),tt.end());
if(ss != tt) {puts("-1"); return 0;}
for(int i = 0; i < n; i++)
{
if(s[i] != t[i])
{
int j = i + 1;
while(s[j] != t[i]) j++;
while(--j >= i) {v.push_back(j+1); swap(s[j],s[j+1]);}
}
}
printf("%d\n",v.size());
for(auto i: v) printf("%d ",i);
return 0;
}