算法思路:
1.你可以假设s可以变换到t
2.只要对t进行反向操作就可以变回s
3.也就是看t的最后一个字符
if(t[last]=='A')
直接删除
else
先删除还要反转字符串
4.直到s.size()==t.size()
代码实现:
#include<iostream>
#include<algorithm>
#include<vector>
#include<math.h>
#include<cfloat>
#include<set>
#include<unordered_map>
#include<string>
using namespace std;
void solve() {
string s, t;
cin >> s >> t;
int sz_s = s.size(),sz_t=t.size();
if(sz_t<sz_s){
cout << "Impossible";return;
}
while (sz_s != sz_t) {
//删除t串的末尾
bool revesed = (t[sz_t - 1] == 'B');
t.erase(sz_t-1,1);
if (revesed) { reverse(t.begin(),t.end()); }
sz_t = t.size();
}
if (t == s) cout << "Possible";
else cout << "Impossible";
}
int main() {
std::ios::sync_with_stdio(false); std::cin.tie(0);
solve();
return 0;
}

京公网安备 11010502036488号