题目大意: B A ( s ) BA(s) BA(s)代表字符串中 b a ba ba的数量, A B ( s ) AB(s) AB(s)代表字符串中 a b ab ab的数量。每次可以选择 s s s中的一个字符替换为 a , b a,b a,b,求在最小操作次数下让 B A ( s ) = A B ( s ) BA(s)= AB(s) BA(s)=AB(s)后得到的字符串。
思路分析:题目要求使 a b ab ab和 b a ba ba平衡,那么我们考虑什么时候能够达成平衡条件:对于一个字串单位 a b a aba aba或 b a b bab bab,其 a b ab ab和 b a ba ba的数量是平衡的。
那么我们再考虑非法的情况,如果出现 a b b 、 b a a abb、 baa abb、baa,不难发现如果前后拼接字符如果都相同的话,那么一定会构成 b a b bab bab类型,如果先后分别加相反字符( a a a a a b b b b b aaaaabbbbb aaaaabbbbb、 b b b b b a a a a a bbbbbaaaaa bbbbbaaaaa),那么只需要修改首尾字符即可。我们继续将这个结论进行推广,很容易发现对于任意的字符串,字串内部一定存在①.相等的 a b 、 b a ab、ba ab、ba字串数目②.二者相差 1 1 1.
那么对于给定的字符串,只需要判断是否字符串首尾字符是否相等,如果不相同则修改为相同即可。
#include
using namespace std;
inline void solve(){
char s[1000]; cin >> s;
int len = strlen(s);
if (len > 1 && s[0] != s[len - 1]){
if (s[len - 1] == 'a') s[len - 1] = 'b';
else s[len - 1] = 'a';
}
cout n >> k;
int now = 1, cnt = 0;
if(n == 1){ cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?