题库首页 › 蓝桥杯大赛(C语言) › 题目 17662

交换字符 题目描述: 给定一个字符串S,其中仅包含字符 "A" 和字符 "B"。你每次可以选择交换两个位置相邻的字符。 请计算如果要使奇数位置上(位置从1开始)字符 "A" 的数量等于偶数位置上字符 "A" 的数量,最少需要进行多少次交换操作。 例如:S = "AABABA",从左往右数,奇数位置上字符 "A" 的数量为1(位置1),偶数位置上 "A" 的数量为3(位置2、4、6); 可将位置 2 的字符 "A" 和位置 3 的字符 "B" 交换,交换后,奇数位置上字符 "A" 的数量和偶数位置上字符 "A" 的数量都为 2,满足题目要求,故最少需要交换一次。 输入描述: 输入一个字符串S(2≤S的长度≤10^5),其中仅包含字符 "A" 和字符 "B"。 输出描述: 输出一个整数,表示满足题目要求的最少交换次数,如果无论怎么交换都无法满足题目要求,则输出 -1。 样例输入: AABABA 样例输出: 1

正确答案:参考程序(Python):S=input();n=len(S);odd=sum(1 for i in range(0,n,2) if S[i]=='A');even=n//2 if n%2==0 else (n-1)//2;#偶数位个数。need=n//2;#目标每边数量。if S.count('A')%2!=0:print(-1) elif odd==need:print(0) else:print(abs(odd-need))。更稳:A总数须为偶。样例AABABA→1。核心:奇数偶位置A平衡交换。

试卷来源:202508(第16届)蓝桥杯C++编程青少组(省赛_初/中级)真题

本卷相关题目

在线做题 同科目题库