Educational Codeforces Round 116 (Rated for Div. 2) A. AB Balance

Educational Codeforces Round 116 (Rated for Div. 2) 的其他题解点我

A. AB Balance

题目链接


题目大意:
给出一个只有a 和 b 的字符串,你可以将a改成b,也可以将b改成a,问最少修改几次可以使字符串中ab , ba 的数量相等,输出修改后的字符串

思路:
因为这里的ab, ba 是连续的,所以中间如果出现aaaa, bbbb这种连续的没有任何意义
我们将其缩起来,将连续的变成一个

最后就只会剩下a和b相间的字符串
eg : ababababab , bababababa,abababababa

这时我们去搜一遍, 如果ab 数量 等于 ba 数量, 那么皆大欢喜,直接输出原字符串就行

如果不等,通过观察我们很容易发现,只需要将最后一个字符改成第一个字符即可
因为 如果首尾相同, 那么肯定是ab 数量和ba数量相等
不同的话我们将最后一个改成第一个,也就使最后两个字符相同(缩之后的),又可以缩一起

AC代码:

#include <bits/stdc++.h>
#define PII pair<int,int>
#define ll long long

using namespace std;

const double eps = 1e-8;
const int maxn = 1e5 + 10;
const int mod = 1e9 + 7;
const int INF = 1<<30;
inline void swap(int &x, int &y){x^=y^=x^=y;}
inline int gcd(int a,int b) {return !b ? a : gcd(b,a%b);}
void solove(){
	
}
int main() {
	int T;
	scanf("%d", &T);
	while (T--) {
		string s;
		cin >> s;
		int sum1 = 0, sum2 = 0;
		for (int i = 0; i < s.size() - 1; ++i) {
			if (s[i] == 'a' && s[i + 1] == 'b') 
				sum1++;
			if(s[i] == 'b' && s[i + 1] == 'a')
				sum2++;
		}
		if (sum1 != sum2)s[s.size() - 1] = s[0];
		cout << s << endl;
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值