标签:ab ba AB str 改成 rm CF1606A Balance
题目大意
给定一个字符串,每次可以修改一个字符。
你需要知道将该字符串中 ab
和 ba
的个数修改为相等的最少步数。但是只需要输出修改后的字符串。
题目分析
一道还算和谐的题。
容易发现:ab
和 ba
一定是在一堆 a
和一堆 b
之中的,我们定义 {a}
表示连在一起的许多 a
,同理,{b}
表示连在一起的许多 b
。
序列可以表示为 {a}{b}{a}{b}...
,发现:在连续的 a
和 b
之间一定会出现一个 ab
,同理,在连续的 b
和 a
之间一定会出现一个 ba
。
所以 \(\rm AB(s)\) 和 \(\rm BA(s)\) 最多相差 \(1\)。
考虑 \(\rm AB(s)=BA(s)+1\):
-
最后的元素为
b
时,我们把b
改成a
,于是相等。破坏了一个ab
。 -
最后的元素为
{b}
时,我们把最后面的b
改成a
,于是相等。增加了一个ba
。
考虑 \(\rm AB(s)+1=BA(s)\):
-
最后的元素为
a
时,我们把a
改成b
,于是相等。破坏了一个ab
。 -
最后的元素为
{a}
时,我们把最后面的a
改成b
,于是相等。增加了一个ab
。
总而言之,其实不管怎样,我们只需要将字符串最后面的字符改成第一个字符即可。
代码
int main(void)
{
ios::sync_with_stdio(false);
int T;
cin>>T;
while(T--)
{
string str;
cin>>str;
str[str.size()-1]=str[0];//str.back()=str[0];
cout<<str<<endl;
}
return 0;
}
标签:ab,ba,AB,str,改成,rm,CF1606A,Balance 来源: https://www.cnblogs.com/Coros-Trusds/p/15484519.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。