乘法原理 LeetCode 828. 统计子串中的唯一字符
我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数。
例如:s = "LEETCODE" ,则其中 "L", "T","C","O","D" 都是唯一字符,因为它们只出现一次,所以 countUniqueChars(s) = 5 。
本题将会给你一个字符串 s ,我们需要返回 countUniqueChars(t) 的总和,其中 t 是 s 的子字符串。输入用例保证返回值为 32 位整数。
注意,某些子字符串可能是重复的,但你统计时也必须算上这些重复的子字符串(也就是说,你必须统计 s 的所有子字符串中的唯一字符)。

1 <= s.length <= 105s只包含大写英文字符
需要统计所有子串中唯一字符次数的总和,可以换个角度统计每个字符在不同子串中出现的次数。

假设当前字符为s[i],s[i]出现的子串只能出现一次s[i],如果出现两次那么s[i]就不计算。所以如果想要计算s[i]对结果的贡献,需要找出左边第一次出现s[i]的地方L,和右边第一次出现s[i]的地方R。
所以只包含一次s[i]的字符串 左边界必须大于等于L+1,右边界必须小于等于R-1,左边界可以取L+1~i ,右边界可以取i到R-1,所以一共有(i-L)*(R-i-2)种情况。
因为都是大写字母,可以使用L(i),R(i)数组表示i左边第一次出现s[i]的下标,i右边第一次出现s[i]的下标。
可以在遍历时使用一个大小为26的数组维护所有字母最后一次出现的下标,然后更新L(i)和R(i)。
class Solution {
public:int uniqueLetterString(string s) {int n = s.size();vector<int>l(n),r(n);vector<int>p(26,-1);for(int i=0;i<n;i++){l[i]=p[s[i]-'A'];p[s[i]-'A']=i;}p=vector<int>(26,n);for(int i=n-1;i>=0;i--){r[i]=p[s[i]-'A'];p[s[i]-'A']=i;}int res=0,MOD=1e9+7;for(int i=0;i<n;i++){res = (res+(long long)(i-l[i])*(r[i]-i))%MOD;}return res;}
};
相关文章:
乘法原理 LeetCode 828. 统计子串中的唯一字符
我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数。 例如:s "LEETCODE" ,则其中 "L", "T","C","O","D" 都是唯一字符,…...
python桌面开发PyQt6库和工具库QTDesigner安装和配置
一、安装PyQt6 二、安装pyqt6-tools 三、安装外部工具 四、创建QTDesigner 1.首先查找designer.exe的路径(可以自己在窗口中选择,也可以使用Everything搜索) 2.使用Everything搜索后会出现多个designer.exe,选中,OpenPath 3.选择…...
火柴棒等式
枚举 只要在保证等式正确的基础上判断火柴棒有没有用完就可以 因为数比较小,而且我不知道最大的等式中的数是多少,索性就设置为999了 还好对效率要求不大(doge) 要不然就得自己慢慢改最大数来试了 代码如下: #in…...
给定两个字符串 s 和 t ,找不同
题意: 给定两个字符串 s 和 t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例 1: 输入:s “abcd”, t “abcde” 输出:“e”…...
从权限跳转看Activity的data android:scheme
在应用申请悬浮窗权限的时候,可以跳转到相应的设置界面,并且自动切换到应用的条目,高亮显示一下, android悬浮窗权限怎么申请 在Android中,要申请悬浮窗权限,需要以下步骤: 在 AndroidManifes…...
C++ Qt QFile用法介绍与代码演示
作者:令狐掌门 技术交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目录 打开和关闭文件读取文件写入文件示例代码自定义格式文件解析在Qt 中 QFile 的类用于读写本地文件系统中的文件。它继承自 QIODevice,所以它包含了许多用于数据输入和输出的功…...
Redis面试题:Redis的数据过期策略有哪些?
目录 面试官:Redis的数据过期策略有哪些 ? 惰性删除 定期删除 面试官:Redis的数据过期策略有哪些 ? 候选人: 嗯~,在redis中提供了两种数据过期删除策略 第一种是惰性删除,在设置该key过期时间后,我们…...
1.2.1 C语言结构体初始化方法总结
文章目录 结构体定义通用定义注册事项结构体初始化方法一简述示例方法二简述示例方法三简述示例方法四简述示例方法五简述示例结构体定义 通用定义 常用的结构体定义,有2种形式, 一种是关键字struct 结构体形式,如下...
CentOS 7 安装 Weblogic 14 版本
安装JDK程序 注意:安装weblogic前,先安装JDK!(要求jdk(1.7以上)): 一、创建用户组weblogic及用户weblogic groupadd weblogic useradd -g weblogic weblogic二、将下载好的jdk及weblogic上传至/home/webl…...
ES之x-pack-core-7.14.2许可证修改为白金版
X-Pack是什么 X-pack是elasticsearch的一个扩展包,将安全,警告,监视,图形和报告功能捆绑在一个易于安装的软件包中,虽然x-pack被设计为一个无缝的工作,但是你可以轻松的启用或者关闭一些功能。 主要分一下步…...
在Ubuntu18.04安装适合jdk8的eclipse
直接在Ubuntu软件那里下载的eclipse不能用,下载后启动会报错:Eclipse An error has occurred. See the log file/home/hadoop/.eclipse/ org.eclipse.platform_3.8_155965261/ configuration/1700567835954.log 上网搜索方法,按教程说的修改e…...
openlayers+jsts 实现对行政区以外的区域进行遮罩(兼容多面的情况,兼容不同的ol版本)
先抛效果图,该区域有很多个小面 之前在网上搜到的方式实现 Openlayers 为目标范围以外的区域添加遮罩 - 知乎 核心代码如下,如果您不需要兼容全国的所有省市,而刚好要加地区又是连贯的区域的话,该方法可行,但是如果需要兼容全国…...
【MySQL】查询进阶
👑专栏内容:MySQL⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、数据库约束1、约束类型2、not null3、unique4、default5、primary key6、foreign key 二、新增三、查询1、聚合查询2、分组…...
C++学习之路(五)C++ 实现简单的文件管理系统命令行应用 - 示例代码拆分讲解
简单的文件管理系统示例介绍: 这个文件管理系统示例是一个简单的命令行程序,允许用户进行文件的创建、读取、追加内容和删除操作。这个示例涉及了一些基本的文件操作和用户交互。 功能概述: 创建文件 (createFile()): 用户可以输入文件名和内…...
Node.js下载安装及配置镜像源
一、进入官网地址下载安装包 https://nodejs.org/dist 选择对应你系统的Node.js版本 这里我选择的是Windows系统、64位 二、安装程序 (1)下载完成后,双击安装包,开始安装Node.js (2)直接点【Next】按钮,此处可根据…...
RAC 下expdp impdp 并行 parallel FK
1. dump 文件非共享下的并行 Customer receives the following errors: ORA-31693: Table data object "<SCHEMA_NAME>"."<TABLE_NAME>" failed to load/unload and is being skipped due to error: ORA-31617: unable to open dump file &qu…...
【数据结构】动态顺序表详解
目录 1.顺序表的概念及结构 2.动态顺序表的实现 2.1创建新项目 2.2动态顺序表的创建 2.3接口的实现及测其功能 2.3.1初始化 2.3.2尾插 2.3.3头插 2.3.4尾删&头删 2.3.5打印&从任意位置插入 2.3.6删除任意位置的数据 2.3.7查找 2.3.8销毁顺序表 3.结语 He…...
Nginx代理https请求的操作过程
理论很简单,过程很曲折,版本适配的问题要小心。 场景: 要和前端进行联调,我本地后端用了https,证书是自制的,主要是页面里面有一些oauth2认证的地方,需要跳转。 比如https://aaa.com/profile.h…...
Linux 面试题(一)
目录 1、绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令? 2、怎么查看当前进程?怎么执行退出?怎么查看当前路径? 3、怎么清屏?怎么退出当前命…...
HIVE SQL取整函数汇总
目录 int()round(double a)round(double a,int d)floor()ceil() int() 向零取整,即向接近零的方向取整。 int(5.6)输出:5 int(-5.6)输出:-5 round(double a) 四舍五入取整 select round(5.6)输出:6 select round(-5.6)输出&…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
