news 2026/4/23 14:42:04

每日算法练习Day03

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
每日算法练习Day03

题目来源

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% 的数据有:T=1,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-- > 0) { int n = sc.nextInt(); // 每组数据的n String s = sc.next(); // 每组数据的字符串s // 构建两种合法的交替字符串: // 形式1:B开头,交替排列(B A B A...) StringBuilder pattern1 = new StringBuilder(); // 形式2:A开头,交替排列(A B A B...) StringBuilder pattern2 = new StringBuilder(); for (int i = 0; i < 2 * n; i++) { if (i % 2 == 0) { // 偶数位(从0开始) pattern1.append('B'); pattern2.append('A'); } else { // 奇数位 pattern1.append('A'); pattern2.append('B'); } } // 计算原字符串与两种形式的差异数,交换次数=差异数/2 int cost1 = calcDiff(s, pattern1.toString()); int cost2 = calcDiff(s, pattern2.toString()); // 输出最小交换次数 System.out.println(Math.min(cost1, cost2)); } 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; }

1. 先获取数据组数

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

3.建立两种模式来实现这个字母不同的结果,最后再比较这个操作过后的字符串和原来的字符串的区别即可

注释:

s.charAt(i)是获取数组中对应的字母

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:17:41

灵感不再掉线:Rokid 智能眼镜,如何把音乐创作变成随身工作站?

&#x1f58b;️ 作者&#xff1a;意疏 技术博主 / CSDN KOL “访问量会到百万&#xff0c;但我会先成为那个值得被看见的人。” 有些旋律来得像风&#xff0c;一旦错过&#xff0c;就再也记不住了。”Rokid 不是给你一副眼镜&#xff0c;而是给你一个随身的“灵感备份器”。 …

作者头像 李华
网站建设 2026/4/23 5:57:01

VibeVoice-TTS是否值得用?真实用户一个月使用心得分享

VibeVoice-TTS是否值得用&#xff1f;真实用户一个月使用心得分享 过去三十天&#xff0c;我用 VibeVoice-TTS-Web-UI 完成了6个播客样片、3本有声书试读章节、2套客服对话训练音频&#xff0c;还给团队做了4次AI语音演示。不是跑通Demo&#xff0c;而是真正在内容生产一线把它…

作者头像 李华
网站建设 2026/4/23 12:24:10

Allegro导出Gerber与钻孔文件同步处理方法

以下是对您提供的博文内容进行 深度润色与专业重构后的版本 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹 :语言自然、有“人味”,像一位资深PCB工程师在技术分享会上娓娓道来; ✅ 摒弃模板化结构 :删除所有“引言/核心知识点/应用场景/总结”等刻板标题,…

作者头像 李华
网站建设 2026/4/23 12:24:57

滤波指令背后的数学原理:深入解析Filter_PT1与Filter_PT2的算法差异

滤波指令背后的数学原理&#xff1a;深入解析Filter_PT1与Filter_PT2的算法差异 在工业控制系统中&#xff0c;信号滤波是确保测量数据可靠性的关键技术。西门子博途PLC提供的Filter_PT1和Filter_PT2滤波指令&#xff0c;虽然名称相似&#xff0c;但其数学原理和工程应用却存在…

作者头像 李华
网站建设 2026/4/23 13:03:47

手把手教你用C#编写第一个上位机通信程序

以下是对您提供的博文内容进行 深度润色与专业重构后的版本 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹,语言更贴近一线工程师真实表达 ✅ 摒弃模板化标题(如“引言”“总结”),全文以自然逻辑流推进 ✅ 所有技术点均融合场景、原理、陷阱、实操于一体,无空…

作者头像 李华
网站建设 2026/4/23 6:08:32

Chandra OCR部署教程:vLLM API服务接入LangChain实现文档智能体

Chandra OCR部署教程&#xff1a;vLLM API服务接入LangChain实现文档智能体 1. 为什么你需要Chandra OCR——告别“文字丢失”的PDF处理时代 你有没有遇到过这样的场景&#xff1a;扫描一份带表格的合同&#xff0c;用传统OCR工具识别后&#xff0c;表格变成了一堆错乱的换行…

作者头像 李华