ABBADiv1

题意:

规定两种操作,一种是在字符串的末尾添加A,另一种是在末尾添加B然后反转字符串。现在给你一个起始串,一个终点串,然后问你是否能够通过以上两种操作,从起始串变为终点串。

题解:

将问题反过来考虑,那么问题就变为了是否能够从终点串变为起始串。令起始串为s,终点串为t。

首先考虑串t就是串s的子串,那么这个子串的前面的B的数量一定要和这个子串后面的B的数量相同,这是因为,只有相同的时候才能消掉。并且如果第一字符不是B,且匹配的位置不是在第一个,那么第一次的反转就无法成功,即s前面的那些A是消不掉的。

第二种情况就是t的反转时s的子串,做法和前面相似,只是判断条件变为了子串前面的B的数量要比后面的B的数量小1。

代码:

#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<string>
using namespace std; class ABBADiv1 {
public:
string canObtain(string initial, string target) {
string s = initial, t = target;
int pos = -;
while (true) {
pos = t.find(s, pos + );
if (pos == t.npos)break;
int B0 = , B1 = ;
for (int i = ; i < pos; i++)if (t[i] == 'B')B0++;
for (int i = pos + s.length(); i < t.length(); i++)if (t[i] == 'B')B1++;
if (B0 == B1) {
if (pos == )return "Possible";
else if (t[] == 'B')return "Possible";
}
}
reverse(s.begin(), s.end());
pos = -;
while (true) {
pos = t.find(s, pos + );
if (pos == t.npos)break;
int B0 = , B1 = ;
for (int i = ; i < pos; i++)if (t[i] == 'B')B0++;
for (int i = pos + s.length(); i < t.length(); i++)if (t[i] == 'B')B1++;
if (B0 == B1 + && t[] == 'B')
return "Possible";
}
return "Impossible";
}
};

最新文章

  1. 索引超出了数组界限(Microsoft.SqlServer.Smo)
  2. iOS多播放器封装
  3. springMVC中一个controller多个方法
  4. [Android ] linux命令英文缩写的含义(方便记忆)
  5. Eclipse学习总结(02)-动态项目部署到到本地Tomcat
  6. PHP换行符详解 PHP_EOL,&lt;br /&gt;
  7. 我看的公开课系列--《TED:对无知的追求》 by stuart firestein
  8. SQL SERVER-Delete和Truncate的区别
  9. ubuntu下安装pthread的manpages(man 手册) 在Ubuntu中查看STL帮助
  10. python with关键字学习
  11. mysql show variables系统变量详解
  12. ES6新特性-------解构、参数、模块和记号(续)
  13. asp.net用户身份验证时读不到用户信息的问题 您的登录尝试不成功。请重试。 Login控件
  14. js 利用iframe和location.hash跨域解决的方法,java图片上传回调JS函数跨域
  15. 【Zabbix】在CentOS7上安装Zabbix3.0
  16. 给div添加2个class
  17. 全球排名第一的开源ERP Odoo v12 最新一键安装体验版正式发布
  18. python并发编程之协程知识点
  19. vim删除.swp
  20. C#递归复习

热门文章

  1. kafka 的offset的重置
  2. android静默安装和智能安装(转)
  3. golang echo livereload
  4. Codeforces 653G Move by Prime 组合数学
  5. Java-数据结构之栈练习
  6. R语言中文社区历史文章整理(类型篇)
  7. 设计模式之第13章-职责链模式(Java实现)
  8. Linux之匿名FTP服务器搭建
  9. leetcode 【 Copy List with Random Pointer 】 python 实现
  10. alert(1) to win部分解题