题意
给一个初始串和目标串,两种操作,问能不能变过去。
思路
我们不能从初始串考虑如何变过去,这样情况太多。
考虑从目标串能不能变成初始串。
由题意,我们知道不管加的是A还是B,最后都在字符串的最后一位。也就是说target的最后一位一定是刚才新加的。并且去掉之后只有唯一的字符串对应。
所以我们就一直去掉target的最后一位,直到长度和initial相等,比较一下即可。
代码
class ABBA {
public:
string canObtain(string initial, string target) {
while (SZ(target) != SZ(initial))
{
if (target.back() == 'A') target.pop_back();
else
{
target.pop_back();
reverse(target.begin(), target.end());
}
}
return target == initial ? "Possible" : "Impossible";
}
};