一次遍历+维护前后缀+枚举中间+位运算

lc2484

前缀、后缀数组分别统计数字对的出现次数,枚举字符串中间字符

累加前后缀相同数字对的乘积,得到长度为5的回文子序列总数。

class Solution {
const long MOD = 1e9 + 7;
public:
int countPalindromes(string s) {
int suf[10]{}, suf2[10][10]{}, pre[10]{}, pre2[10][10]{};
for (int i = s.length() - 1; i >= 0; --i) {
char d = s[i] - '0';
for (int j = 0; j < 10; ++j)
suf2[d][j] += suf[j];
++suf[d]; //预处理后缀
}

long ans = 0L;
for (char d : s) {
d -= '0';
--suf[d];
for (int j = 0; j < 10; ++j)
suf2[d][j] -= suf[j]; // 撤销


for (int j = 0; j < 10; ++j)
for (int k = 0; k < 10; ++k)
ans += (long) pre2[j][k] * suf2[j][k]; // 枚举所有字符组合


for (int j = 0; j < 10; ++j)
pre2[d][j] += pre[j];
++pre[d];

}
return ans % MOD;
}
};

lc1930

unordered_map<char, pair<int, int>> hash;算起止

class Solution {
public:
int countPalindromicSubsequence(string s)
{
int n = s.size();
unordered_map<char, pair<int, int>> hash;
for (int i = 0; i < n; ++i)
{
if (!hash.count(s[i]))
hash[s[i]].first = i;
hash[s[i]].second = i;
}
int ret = 0;
for (auto& [ch, pos] : hash) {
int first = pos.first;
int last = pos.second;
if (last - first < 2) continue; // 中间没有字符,无法形成长度为3的回文
unordered_set<char> st;
for (int i = first + 1; i < last; ++i)
st.insert(s[i]);
ret += st.size();
}
return ret;
}
};

优化

一次遍历+维护前后缀+枚举中间+位运算

前缀后缀二进制标记字符存在性

枚举字符串中间字符作为回文中心

has[mid] |= pre & suf;

累加得到长度为3的回文子序列总数

for (int mask : has)
ans += popcount((uint32_t) mask);

算法就是 一次遍历 不断维护

class Solution {
public:
int countPalindromicSubsequence(string s) {
int n = s.size();
// 统计 [1,n-1] 每个字母的个数
int suf_cnt[26]{};
int suf = 0;
for (int i = 1; i < n; i++) {
int ch = s[i] - 'a';
suf_cnt[ch]++;
suf |= 1 << ch; // 把 ch 记录到二进制数 suf 中,表示后缀有 ch
}

int pre = 0;
int has[26]{}; // has[mid] = 由 alpha 组成的二进制数
for (int i = 1; i < n - 1; i++) { // 枚举中间字母 mid
int mid = s[i] - 'a';
suf_cnt[mid]--;

// 撤销 mid 的计数,suf_cnt 剩下的就是后缀 [i+1,n-1] 每个字母的个数
if (suf_cnt[mid] == 0)

// 后缀 [i+1,n-1] 不包含 mid
suf ^= 1 << mid;

// 从 suf 中去掉 mid

pre |= 1 << (s[i - 1] - 'a');

// 把 s[i-1] 记录到二进制数 pre 中,表示前缀有 s[i-1]
has[mid] |= pre & suf;

// 计算 pre 和 suf 的交集,|= 表示把交集中的字母加到 has[mid] 中
}

int ans = 0;
for (int mask : has) {
ans += popcount((uint32_t) mask);

//每个字符 has一个的记录表

// mask 中的每个 1 对应着一个 alpha
}
return ans;
}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1139326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qwen2.5-7B远程办公:云端GPU让老家电脑变工作站

Qwen2.5-7B远程办公&#xff1a;云端GPU让老家电脑变工作站 1. 为什么需要云端GPU工作站&#xff1f; 春节回老家发现电脑性能不足&#xff0c;临时项目却要用Qwen2.5大模型&#xff1f;这是很多AI开发者和研究者的真实困境。老家的旧电脑可能连基础编程环境都跑不动&#xf…

AI如何帮你掌握Vue2生命周期?自动生成代码示例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Vue2项目&#xff0c;展示所有生命周期钩子函数的使用示例。包括beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy和destroyed。每个…

零基础入门:5分钟用UPnP搭建家庭网络共享

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个面向初学者的UPnP简易文件共享工具&#xff0c;要求&#xff1a;1. 提供图形化界面 2. 支持一键开启共享 3. 包含简单权限设置 4. 支持常见文件类型预览 5. 提供详细的操作…

告别重复代码:Hutool让你的开发效率提升300%

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个对比演示项目&#xff0c;左侧展示传统Java实现方式&#xff0c;右侧展示使用Hutool的优化实现&#xff0c;对比以下场景&#xff1a;1. 日期时间处理 2. 字符串操作 3. 集…

1小时打造中国区域经济数据原型系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速开发一个中国区域经济数据原型系统。核心功能&#xff1a;1) 中国地图展示各省经济指标&#xff1b;2) 多维度数据对比(GDP、人均收入、增长率等)&#xff1b;3) 时间轴查看历…

达梦数据库连接效率提升全攻略

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个达梦数据库连接效率优化工具&#xff0c;功能包括&#xff1a;1. 连接性能基准测试&#xff1b;2. 网络延迟分析&#xff1b;3. 连接池配置建议&#xff1b;4. 常见性能问…

Qwen3-VL-WEBUI部署指南:Linux服务器环境准备步骤

Qwen3-VL-WEBUI部署指南&#xff1a;Linux服务器环境准备步骤 1. 简介与背景 1.1 Qwen3-VL-WEBUI 是什么&#xff1f; Qwen3-VL-WEBUI 是基于阿里云最新开源的 Qwen3-VL-4B-Instruct 模型构建的一站式可视化推理界面&#xff0c;专为多模态任务设计。它将强大的视觉语言理解…

中文命名实体识别迁移部署:RaNER模型跨平台方案

中文命名实体识别迁移部署&#xff1a;RaNER模型跨平台方案 1. 引言&#xff1a;AI 智能实体侦测服务的现实需求 在信息爆炸的时代&#xff0c;非结构化文本数据&#xff08;如新闻、社交媒体、文档&#xff09;占据了企业数据总量的80%以上。如何从中高效提取关键信息&#…

5个最火AI模型镜像推荐:Qwen2.5开箱即用,10元全体验

5个最火AI模型镜像推荐&#xff1a;Qwen2.5开箱即用&#xff0c;10元全体验 引言&#xff1a;为什么你需要这些AI镜像&#xff1f; 作为一名AI课程的学生&#xff0c;你是否遇到过这样的困境&#xff1a;老师要求体验3个AI模型&#xff0c;但打开GitHub发现几十个选项无从下手…

JAVA SPI入门指南:从零到实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个最简单的JAVA SPI入门示例&#xff0c;包含&#xff1a;1) 一个简单的计算器接口 2) 加减乘除四种实现 3) 清晰的配置说明 4) 逐步的运行演示。要求使用最基础的Java语法&…

RaNER模型长文本处理:分段识别与结果合并策略

RaNER模型长文本处理&#xff1a;分段识别与结果合并策略 1. 引言&#xff1a;AI 智能实体侦测服务的挑战与需求 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;命名实体识别&#xff08;Named Entity Recognition, NER&#xff09;是信息抽取的核心任务之一。随…

Qwen2.5-7B开箱测评:2块钱体验最新代码大模型

Qwen2.5-7B开箱测评&#xff1a;2块钱体验最新代码大模型 引言&#xff1a;代码大模型的新选择 作为一名长期关注AI技术发展的从业者&#xff0c;我最近被Qwen2.5系列模型的发布惊艳到了。特别是Qwen2.5-7B这个中等规模的代码大模型&#xff0c;在保持轻量化的同时&#xff0…

Qwen2.5-7B论文辅助神器:云端GPU快速部署,1小时1块钱

Qwen2.5-7B论文辅助神器&#xff1a;云端GPU快速部署&#xff0c;1小时1块钱 1. 为什么研究生需要Qwen2.5-7B&#xff1f; 作为一名研究生&#xff0c;文献综述可能是你最头疼的任务之一。每天需要阅读大量论文&#xff0c;提取关键信息&#xff0c;总结研究现状&#xff0c;…

Qwen3-VL视觉编码教程:网页前端自动生成案例

Qwen3-VL视觉编码教程&#xff1a;网页前端自动生成案例 1. 引言&#xff1a;为何选择Qwen3-VL进行前端生成&#xff1f; 随着多模态大模型的快速发展&#xff0c;视觉到代码&#xff08;Vision-to-Code&#xff09; 已从概念验证走向工程落地。阿里最新开源的 Qwen3-VL-WEBU…

HTOP实战:5个运维工程师必备的高级技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式HTOP教程应用&#xff0c;包含5个典型运维场景&#xff1a;1) 内存泄漏定位 2) CPU热点分析 3) 僵尸进程处理 4) IO瓶颈诊断 5) 自定义监控视图。每个场景提供分步指…

AI助力JProfiler:智能分析Java性能瓶颈

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个基于JProfiler的AI辅助分析工具&#xff0c;能够自动扫描Java应用的性能数据&#xff0c;识别潜在的内存泄漏、线程死锁和CPU热点问题。工具应提供可视化报告&#xff0c;…

Qwen3-VL-WEBUI一文详解:从环境部署到网页推理完整流程

Qwen3-VL-WEBUI一文详解&#xff1a;从环境部署到网页推理完整流程 1. 背景与技术定位 随着多模态大模型的快速发展&#xff0c;视觉-语言理解能力已成为AI系统智能化的重要标志。阿里云推出的 Qwen3-VL 系列模型&#xff0c;作为迄今为止Qwen系列中最强大的视觉-语言模型&am…

PL/SQL开发效率提升:从3天到3小时的秘诀

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个对比实验&#xff1a;1)手动编写一个复杂的PL/SQL报表生成程序 2)使用AI生成相同功能的代码。比较两者的开发时间、代码质量和执行效率。要求包含多表关联、聚合计算和格式…

传统调试 vs AI修复:NumPy错误处理效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个性能对比工具&#xff1a;1) 模拟10种常见的numpy导入错误场景 2) 记录人工解决每种错误所需步骤和时间 3) 使用AI自动诊断修复同样问题 4) 生成可视化对比报告。包含错误…

Qwen3-VL-WEBUI教育辅助实战:课件解析部署教程

Qwen3-VL-WEBUI教育辅助实战&#xff1a;课件解析部署教程 1. 引言 随着AI技术在教育领域的深入应用&#xff0c;智能课件解析、自动内容提取与教学辅助正成为提升教学效率的关键手段。传统的文本型大模型已难以满足现代多媒体教学场景的需求&#xff0c;而具备强大视觉-语言…