DeepSeek    LeetCode 3841. 查询树上回文路径 Java实现
解题思路这道题的核心在于如何高效判断树中任意两点路径上的字符能否重排为回文串。回文串的判定条件一个字符串能重排成回文串当且仅当其出现奇数次的字符最多只有一个。例如 aac 中 a 出现2次偶c 出现1次奇可重排为 aca。核心优化技巧——前缀异或Prefix XOR与位掩码· 用26位整数int的二进制位表示每个字符的奇偶性。某位为1表示对应字符出现奇数次0表示偶数次。· 定义 mask[node] 为从根节点到该节点路径上所有字符的奇偶掩码。· 树上两点 u 和 v 之间路径的奇偶掩码计算公式为mask(u→v) mask(u) XOR mask(v) XOR (1 char(lca(u, v)))其中 lca(u, v) 是 u 和 v 的最近公共祖先。处理更新操作节点字符变更时只需更新以该节点为根的整棵子树的 mask 值。利用 DFS序欧拉序 将子树转化为连续区间再用 树状数组Fenwick Tree 维护区间异或和与单点查询。---Java 实现代码javaimport java.util.*;public class Solution {// 链式前向星存图private int[] head, to, nxt;// 二进制提升LCAprivate int[][] up;private int[] depth;// DFS序欧拉序private int[] in, out;private int timer;private int maxLog;// 树状数组private BIT bit;// 当前字符数组private char[] chars;public ListBoolean palindromePath(int n, int[][] edges, String s, String[] queries) {chars s.toCharArray();// 1. 建图buildGraph(n, edges);// 2. DFS预处理深度、父节点、DFS序maxLog 31 - Integer.numberOfLeadingZeros(n);up new int[maxLog 1][n];depth new int[n];in new int[n];out new int[n];timer 0;dfs(0, -1);// 3. 二进制提升表for (int k 1; k maxLog; k) {for (int i 0; i n; i) {up[k][i] up[k - 1][up[k - 1][i]];}}// 4. 树状数组维护每个节点的前缀掩码bit new BIT(n 2);for (int i 0; i n; i) {int mask 1 (chars[i] - a);bit.rangeXor(in[i], out[i], mask);}// 5. 处理查询ListBoolean ans new ArrayList();for (String query : queries) {if (query.startsWith(update)) {// 解析update ui cint space1 query.indexOf( );int space2 query.indexOf( , space1 1);int u Integer.parseInt(query.substring(space1 1, space2));char c query.charAt(space2 1);if (c ! chars[u]) {int oldMask 1 (chars[u] - a);int newMask 1 (c - a);int diff oldMask ^ newMask; // 变化的位bit.rangeXor(in[u], out[u], diff);chars[u] c;}} else {// 解析query u vint space1 query.indexOf( );int space2 query.indexOf( , space1 1);int u Integer.parseInt(query.substring(space1 1, space2));int v Integer.parseInt(query.substring(space2 1));int l lca(u, v);// 路径掩码 mask(u) ^ mask(v) ^ char(lca)int mask bit.pointQuery(in[u]) ^ bit.pointQuery(in[v]) ^ (1 (chars[l] - a));// 判断是否只有0个或1个1ans.add((mask (mask - 1)) 0);}}return ans;}// ---------- 建图 ----------private void buildGraph(int n, int[][] edges) {int m edges.length;head new int[n];Arrays.fill(head, -1);to new int[m * 2];nxt new int[m * 2];for (int i 0; i m; i) {int u edges[i][0], v edges[i][1];to[i * 2] v;nxt[i * 2] head[u];head[u] i * 2;to[i * 2 1] u;nxt[i * 2 1] head[v];head[v] i * 2 1;}}// ---------- DFS深度、父节点、DFS序 ----------private void dfs(int u, int parent) {in[u] timer;up[0][u] parent -1 ? 0 : parent;for (int e head[u]; e ! -1; e nxt[e]) {int v to[e];if (v parent) continue;depth[v] depth[u] 1;dfs(v, u);}out[u] timer;}// ---------- LCA二进制提升 ----------private int lca(int u, int v) {if (depth[u] depth[v]) {int tmp u; u v; v tmp;}// 提升u到与v同深度int diff depth[u] - depth[v];for (int k maxLog; k 0; k--) {if ((diff (1 k)) ! 0) {u up[k][u];}}if (u v) return u;for (int k maxLog; k 0; k--) {if (up[k][u] ! up[k][v]) {u up[k][u];v up[k][v];}}return up[0][u];}// ---------- 树状数组支持区间异或、单点查询 ----------static class BIT {int n;int[] tree;BIT(int n) { this.n n; tree new int[n 1]; }void add(int idx, int val) {for (; idx n; idx idx -idx) tree[idx] ^ val;}// 区间 [l, r] 异或上 valvoid rangeXor(int l, int r, int val) {add(l, val);add(r 1, val);}// 单点查询int pointQuery(int idx) {int res 0;for (; idx 0; idx - idx -idx) res ^ tree[idx];return res;}}}代码解释1. dfs预处理计算每个节点的深度、父节点和 DFS 进入/退出时间戳。同一子树的节点在 in 和 out 之间形成连续区间。2. BIT 树状数组维护每个节点对应的前缀奇偶掩码从根到该节点。rangeXor(in[u], out[u], mask) 将 u 的整棵子树所有节点的前缀掩码异或上 mask。3. 查询处理· 用 pointQuery(in[u]) 获取 mask(u)。· 计算路径掩码mask(u) ^ mask(v) ^ (1 char(lca))。· 判断 (mask (mask - 1)) 0即二进制中是否只有0个或1个1。4. 更新处理字符从 old 变为 new 时diff (1old) ^ (1new) 表示变化的位对 u 的子树区间异或 diff 即可。

相关新闻

华为MetaERP Oracle EBS R12  Oracle Fusion Cloud 资源费率、制造费用费率全流程配置手册整体前置前提:资源 Resource、部门、工作中心、Routin

华为MetaERP Oracle EBS R12 Oracle Fusion Cloud 资源费率、制造费用费率全流程配置手册整体前置前提:资源 Resource、部门、工作中心、Routin

Oracle EBS R12 & Oracle Fusion Cloud 资源费率、制造费用费率全流程配置手册整体前置前提:资源 Resource、部门、工作中心、Routing 工艺路线、成本账簿 / 成本类型、吸收总账科目、SLA 会计分录规则已预先配置完成;区分两大体系:EBS&a…

2026/10/12 11:53:03 阅读更多 →
华为MetaERP Oracle EBS R12 + Oracle Fusion Cloud 离散制造业料工费全流程成本归集、流转、结转核算方案总前置说明核算基准:全文以制造业主流标准成本法为主,

华为MetaERP Oracle EBS R12 + Oracle Fusion Cloud 离散制造业料工费全流程成本归集、流转、结转核算方案总前置说明核算基准:全文以制造业主流标准成本法为主,

Oracle EBS R12 Oracle Fusion Cloud 离散制造业料工费全流程成本归集、流转、结转核算方案总前置说明核算基准:全文以制造业主流标准成本法为主,附带期间平均成本 PAC 差异说明;EBS 传统本地部署、Fusion 云 SaaS 架构逻辑同源,…

2026/10/14 23:03:49 阅读更多 →
华为MetaERP Oracle EBS 和 Fusion 的生产成本核算主线是相通的:以工单(Work Order/Job)为成本对象,BOM+Routing 决定标准成本结构,车间每一笔实物流转(

华为MetaERP Oracle EBS 和 Fusion 的生产成本核算主线是相通的:以工单(Work Order/Job)为成本对象,BOM+Routing 决定标准成本结构,车间每一笔实物流转(

Oracle EBS 和 Fusion 的生产成本核算主线是相通的:以工单(Work Order/Job)为成本对象,BOMRouting 决定标准成本结构,车间每一笔实物流转(发料、报工、移动、完工、关闭)自动触发会计分录&#…

2026/10/8 14:43:22 阅读更多 →

最新新闻

C# Socket高性能服务器:IOCP与Task协同设计实战

C# Socket高性能服务器:IOCP与Task协同设计实战

1. 项目概述:为什么一个“C# Task Socket”的组合值得深挖到骨子里你打开 Visual Studio,新建一个控制台项目,敲下new TcpListener(IPAddress.Any, 8080),心里想着“服务器不就是监听端口、收发数据吗?”——这想法没…

2026/10/15 13:05:31 阅读更多 →
CMMI 2.0迁移操作指南:从1.3到2.0的实践域重构与评估准备

CMMI 2.0迁移操作指南:从1.3到2.0的实践域重构与评估准备

简介:CMMI 3.0软件工程规范文档是一份面向软件过程改进人员、项目经理和质量管理人员的参考文件,系统介绍CMMI模型的五个成熟度等级——初始级、已管理级、已定义级、定量管理级与优化级,每个等级的关键目标和核心实践均有梳理。文档还提炼了…

2026/10/15 13:05:31 阅读更多 →
TileLang:一种面向瓦片化系统的声明式建模思维

TileLang:一种面向瓦片化系统的声明式建模思维

1. TileLang不是语言,是图形编程的“乐高底板”最近在几个前端技术社区和图形学讨论组里,频繁看到“tilelang”这个词被提起——不是作为某款新发布的编程语言,也不是某个开源框架的代号,而更像一种正在自发形成的图形化创作共识。…

2026/10/15 13:05:31 阅读更多 →
MFC数独游戏完整源码:生成与求解算法及桌面开发实战

MFC数独游戏完整源码:生成与求解算法及桌面开发实战

简介:这是一份面向C与MFC初学者、算法爱好者的数独游戏完整源代码,源自华为编程比赛决赛题目要求,基于Visual Studio 2008 SP1开发。资源包共84个文件,以h头文件、cpp源文件为核心,辅以sln解决方案、vcproj工程文件、r…

2026/10/15 13:05:31 阅读更多 →
HoloCubic 中的 LVGL v7.9.1 嵌入式 GUI:特性概览、硬件要求与 ESP32 移植实战

HoloCubic 中的 LVGL v7.9.1 嵌入式 GUI:特性概览、硬件要求与 ESP32 移植实战

嵌入式物联网智能硬件嵌入式GUI硬件开发 【免费下载链接】HoloCubic 带网络功能的伪全息透明显示桌面站 项目地址: https://gitcode.com/gh_mirrors/ho/HoloCubic 点击查看 免费下载 本篇技术指南围绕 HoloCubic 固件仓库中随附的 LVGL(LittlevGL&#…

2026/10/15 13:05:31 阅读更多 →
瑞萨RA4L1开发板e2studio环境搭建与最小系统验证实战

瑞萨RA4L1开发板e2studio环境搭建与最小系统验证实战

简介:本资源面向使用瑞萨RA4L1系列MCU进行嵌入式开发的工程师与学习者,基于e2studio集成开发环境,提供RA4L1评估套件的开发板测试工程。RA4L1基于支持TrustZone的Arm Cortex-M33内核,工作电压低至1.6V,待机电流低至1.6…

2026/10/15 13:04:28 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →