【Leetcode】1930. 长度为 3 的不同回文子序列

作者:专业抄代码选手日期:2025/11/25

这一题题目不难理解,就是在字符串中寻找有多少个独一无二的回文,只不过这个回文可以不相邻,而且长度只有3。固定首尾,然后再确定中间的字符,加一个去重即可(Set)。

时间复杂度过大,n的3次方

这里的思路比较耿直,直接用3层循环来做
i来寻找首,j来寻找尾,k在中间进行累加即可
最后利用set来进行去重
只不过这里不能ac,时间复杂度过大。

1var countPalindromicSubsequence = function (s) {
2    let set = new Set();
3    for (let i = 0; i < s.length; ++i) {
4        for (let j = s.length - 1; j > i + 1; --j) {
5            if (s[i] === s[j]) {
6                for (let k = i + 1; k < j; ++k) {
7                    set.add(s[i] + s[k] + s[j]);
8                }
9            }
10        }
11    }
12    return set.size
13};
14

ac

这个解法时间复杂度就是n,准确来说是26*n,存在常数,即O(n)
寻找每个字符首次出现的位置,还有最后一次出现的位置
如果这两个位置的字符索引不相等,那么就可以形成回文

1var countPalindromicSubsequence = function (s) {
2    const firstIndex = new Array(26).fill(-1)
3    const lastIndex = new Array(26).fill(-1)
4    for(let i = 0; i < s.length; ++i){
5        const charCode = s.charCodeAt(i) - 'a'.charCodeAt(0)
6        if(firstIndex[charCode] === -1){
7            firstIndex[charCode] = i
8        }
9        lastIndex[charCode] = i
10    }
11    let sum = 0
12    for(let i = 0; i < 26; ++i){
13        let first = firstIndex[i]
14        let last = lastIndex[i]
15        if(first == last) continue
16        let charSet = new Set()
17        for(let j = first + 1; j < last; ++j){
18            charSet.add(s[j])
19        }
20        sum += charSet.size
21    }
22    return sum
23};
24

【Leetcode】1930. 长度为 3 的不同回文子序列》 是转载文章,点击查看原文


相关推荐


C#/.NET/.NET Core技术前沿周刊 | 第 62 期(2025年11.17-11.23)
追逐时光者2025/11/23

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿、推荐或自荐优质文章、项目、学习资源等。 🏆技术前沿周刊Gitee开源地址: gitee.com/ysgdaydayup… 📰技术前沿周刊GitHub开源地址: github.com/YSGStudyHar… 👪DotNetGuid


工业通信必看:PIC 单片机波特率转换方案(含特殊波特率 + 抗干扰电路)
csg11072025/11/22

在工业控制现场,不同设备的串口(如 RS485、RS232)波特率不统一是常遇到的头疼问题 —— 主控板或 PLC 要统一控制这些设备,必须保证波特率一致。可有些设备能手动设置波特率,有些却固定死,没法调整。 基于这个痛点,我从 2018 年开始研发数据双向透传的波特率转换器,经过反复测试改进,第一代产品就稳定落地,至今已在几十个工业项目中应用。今天就把 PIC 单片机实现波特率转换的核心逻辑、特殊波特率实现技巧、抗干扰电路设计讲透,新手也能参考落地。 一、核心方案:PIC 单片机选型与硬


🎨 新来的外包,在大群分享了它的限流算法的实现
有态度的下等马2025/11/20

1. 令牌桶按用户维度限流 前文golang/x/time/rate演示了基于整体请求速率的令牌桶限流; 那基于用户id、ip、apikey请求速率的限流(更贴近生产的需求), 阁下又该如何应对? 那这个问题就从全局速率变成了按照用户维度(group by userid)来做限流,那么 早先的全局的rateLimiter就要变成人手一个令牌桶,也就是userid:rateLimiter的键值对集合,select count( * ) from table ---> select userid,


IIoT 数据接口契约化工具JSON、OPC UA和Sparkplug B 优缺点对比分析
RockHopper20252025/11/19

本文以IIoT(Industrial Internet of Things)的核心需求为背景,系统性论述“数据接口契约化”的必要性,并对 JSON、OPC UA、Sparkplug B 三者作为“契约化工具(Contract Enforcement Mechanisms)”的优缺点作对比分析。 一、为什么 IIoT 需要“数据接口契约化” IIoT 的本质是:跨设备、跨系统、跨生命周期的数据互操作。 没有契约,就没有稳定接口;没有稳定接口,就没有可维护的生态。 1. 设备异构性极高 各


【微服务】【Nacos 3】 ② 深度解析:AI模块介绍
小毅&Nora2025/11/17

📖目录 前言1. Nacos AI 模块概述2. 核心组件详解2.1 MCP (Model Control Plane)2.1.1 核心功能2.1.2 关键类分析McpServerOperationService索引机制 2.1.3 控制器层 2.2 A2A (Agent to Agent)2.2.1 核心功能2.2.2 关键类分析A2aServerOperationService请求处理器 3. 关键源码剖析3.1 模型服务注册流程3.2 代理通信处理流程


Python 的内置函数 print
IMPYLH2025/11/16

Python 内建函数列表 > Python 的内置函数 print Python 的内置函数 print() 是编程中最常用的输出函数之一,主要用于将指定的内容输出到标准输出设备(通常是控制台)。它的基本语法如下: print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) 参数详解: *objects:可接收多个对象参数,会依次打印这些对象。例如: print("Hello", "World") # 输出:H


C语言是什么编译? | 了解C语言编译过程及其重要性
cbarur_2892025/11/15

乐高编程机器人|探索创意与技术结合的无限可能乐高编程机器人结合了乐高积木的创造性和编程的逻辑性,是一种非常适合青少年学习的科技玩具。它不仅能够培养孩子们的动手能力,还能激发他们对编程的兴趣,从而提升解决问题的能力。乐高机器人通常配备了多种传感器和电动机,可以根据编程指令执行各种复杂的任务,例如行走、避障、抓取物体等。随着科技的不断进步,乐高编程机器人也不断更新换代,添加了更多高科技的功能。例如,最新版本的乐高机器人可以通过蓝牙连接到手机或电脑,进行远程控制和编程。通过这种方式,孩子们可以在编程的


Python 的内置函数 len
IMPYLH2025/11/14

Python 内建函数列表 > Python 的内置函数 len Python 的内置函数 len() 是一个常用的内置函数,主要用于返回对象的长度或项目数量。它可以应用于多种数据类型,包括但不限于以下几种: 字符串(str):返回字符串中的字符数量。例如: text = "Hello, World!" print(len(text)) # 输出:13 列表(list):返回列表中元素的数量。例如: numbers = [1, 2, 3, 4, 5] print(len(number


Android 修改项目包名,一键解决.
没有了遇见2025/11/13

需求: 项目需要 需要改变包名和签名. 版本 Windows 10 实现 1.修改设置 2:shift+F6 3: 确认修改


uniapp之WebView容器原理详解
前端一课2025/11/11

UniApp WebView容器原理详解 一、WebView容器概述 UniApp之所以能够实现跨平台开发,其核心原理是"uniapp 主要是运行在webview容器中的"。这句话揭示了UniApp的底层架构:它本质上是一个基于WebView的混合应用框架。 1.1 什么是WebView容器 WebView是一种系统组件,可以嵌入到原生应用中,用于显示网页内容。它本质上是一个迷你浏览器,提供了网页渲染、JavaScript执行环境以及与原生功能的桥接能力。 // WebView的基本结构(概念图

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2025 聚合阅读