VMware虚拟机一键部署DeepSeek-OCR开发环境教程

核心内容摘要

Qt开发中那些坑:C++异常处理try-catch实战避坑指南
社会网络仿真软件:NodeXL_(14).案例研究:NodeXL在社会科学研究中的应用

HoRain云--Linux系统服务管理终极指南

题目来源U535982 C-小梦的AB交换 - 洛谷题目描述小梦有一个长度为 2∗n 的 AB 串 s即 s 中只包含 A 和 B 两种字符且其中恰好有 n 个 A 和 n 个 B。

他可以对 s 执行以下操作∙ 选择 i,j (1≤i,j≤2⋅n,ij)并交换 si​ 和 sj​。

他想知道需要至少多少次操作才能使得 s 满足相邻的字符不相同请你帮他算一算吧。

输入格式本题有多组测试数据。

输入的第一行包含一个正整数 T表示数据组数。

接下来包含 T 组数据每组数据的格式如下第一行一个正整数 n表示 s 长度的一半。

第二行一个长度为 2∗n 的字符串 s保证只由 A, B 两种字符构成。

输出格式对于每组测试数据在单独的一行输出一个整数表示最少进行的操作次数。

输入输出样例输入 #1复制2 3 AAABBB 3 ABAABB输出 #1复制1 1说明/提示【样例 1 解释】交换 s2​A 和 s5​B得到 s ABABAB满足题意一次交换即可。

【数据范围】令 N 表示 T 组数据中 n 的总和。

对于 50% 的数据有T1,1≤N≤3。

对于所有的测试数据有 1≤T≤100,1≤N≤106。

题解import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc new Scanner(System.in); int T sc.nextInt(); // 读取测试数据组数 while (T--

{ int n sc.nextInt(); // 每组数据的n String s sc.next(); // 每组数据的字符串s // 构建两种合法的交替字符串 // 形式1B开头交替排列B A B A... StringBuilder pattern1 new StringBuilder(); // 形式2A开头交替排列A B A B... StringBuilder pattern2 new StringBuilder(); for (int i 0; i 2 * n; i) { if (i % 2

{ // 偶数位从0开始 pattern

append(B); pattern

append(A); } else { // 奇数位 pattern

append(A); pattern

append(B); } } // 计算原字符串与两种形式的差异数交换次数差异数/2 int cost1 calcDiff(s, pattern

toString()); int cost2 calcDiff(s, pattern

toString()); // 输出最小交换次数 System.out.println(Math.min(cost1, cost

); } sc.close(); } // 计算原字符串与目标模式的差异数返回交换次数差异数/2 private static int calcDiff(String s, String pattern) { int diff 0; for (int i 0; i s.length(); i) { if (s.charAt(i) ! pattern.charAt(i)) { diff; } } return diff / 2; }

先获取数据组数

然后我们可以用循环来获取数据

建立两种模式来实现这个字母不同的结果最后再比较这个操作过后的字符串和原来的字符串的区别即可注释s.charAt(i)是获取数组中对应的字母

无需下载9.1的网站-无需下载9.1的网站应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123