LeetCode 828. 统计子串中的唯一字符(中心扩展)

1. 题目

我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数。

例如:s = “LEETCODE” ,则其中 “L”, “T”,“C”,“O”,“D” 都是唯一字符,因为它们只出现一次,所以 countUniqueChars(s) = 5 。

本题将会给你一个字符串 s ,我们需要返回 countUniqueChars(t) 的总和,其中 t 是 s 的子字符串。
注意,某些子字符串可能是重复的,但你统计时也必须算上这些重复的子字符串(也就是说,你必须统计 s 的所有子字符串中的唯一字符)。

由于答案可能非常大,请将结果 mod 10 ^ 9 + 7 后再返回。

示例 1:
输入: "ABC"
输出: 10
解释: 所有可能的子串为:"A","B","C","AB","BC""ABC"。其中,每一个子串都由独特字符构成。所以其长度总和为:1 + 1 + 1 + 2 + 2 + 3 = 10示例 2:
输入: "ABA"
输出: 8
解释: 除了 countUniqueChars("ABA") = 1 之外,其余与示例 1 相同。示例 3:
输入:s = "LEETCODE"
输出:92提示:
0 <= s.length <= 10^4
s 只包含大写英文字符

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-unique-characters-of-all-substrings-of-a-given-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 1180. 统计只含单一字母的子串

  • 对每个字符进行考虑,找到每个字符前后同样的字符的位置
  • 左右两边的数量相乘即为,该字符可以出现在子串的次数
class Solution {	//C++
public:int uniqueLetterString(string s) {int i, j, k, count = 0;for(j = 0; j < s.size(); ++j){i = j-1, k = j+1;while(i>=0 && s[i] != s[j])i--;while(k<s.size() && s[j] != s[k])k++;count = (count+(j-i)*(k-j))%1000000007;}return count;}
};

64 ms 7.2 MB

另一种方法,预先存储下来相同字符的位置

class Solution {
public:int uniqueLetterString(string s) {int count = 0;unordered_map<char,set<int>> m;for(int i = 0; i < s.size(); ++i){m[s[i]].insert(i);}int lenl, lenr;for(int i = 0; i < s.size(); ++i){auto it = m[s[i]].find(i);if(it == m[s[i]].begin())lenl = i+1;else{auto itl = it;itl--;lenl = i-*(itl);}if(it == --m[s[i]].end())lenr = s.size()-i;else{it++;lenr = *(it)-i;}count = (count+lenl*lenr)%1000000007;}return count;}
};

276 ms 21.9 MB

python3 解答

class Solution:def uniqueLetterString(self, s: str) -> int:count = 0for j in range(len(s)):i = j-1 k = j+1while i>=0 and s[i]!=s[j]:i -= 1while k<len(s) and s[j]!=s[k]:k += 1count = (count+(j-i)*(k-j))%1000000007return count

804 ms 13.7 MB

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

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

相关文章

钢笔的保养

钢笔其实很泼辣的不需要用心的保养&#xff0c;但如果太不注意了&#xff0c;也会早早损毁了一支好笔。所以&#xff0c;为了自己方便地更长久些&#xff0c;还是要保养一下。保养的方法很简单&#xff0c;就是&#xff1a; 用前先浸&#xff0c;墨水不混&#xff0c;定期清洗。…

hive - 自定义函数(超详细步骤,手把手的交)

用Java开发自定义函数&#xff0c;步骤&#xff1a; 1.eclipse上新建一个工程project&#xff08;db2019)&#xff1b; 2.导jar依赖包&#xff1a; db2019右键 --build path --configure... --add library --user library --new(新建一个library(hive2.3.2_jar)) --add ext…

LeetCode 1053. 交换一次的先前排列

1. 题目 给你一个正整数的数组 A&#xff08;其中的元素不一定完全不同&#xff09;&#xff0c;请你返回可在 一次交换&#xff08;交换两数字 A[i] 和 A[j] 的位置&#xff09;后得到的、按字典序排列小于 A 的 最大可能排列。 如果无法这么操作&#xff0c;就请返回原数组…

bootstrap 树形表格渲染慢_layUI之树状表格异步加载组件treetableAsync.js(基于treetable.js)...

概述后台框架中使用树状表格是非常常用的操作&#xff0c;layUI本身并没有这种组件。 第三方的treetable.js做到了完美的实现&#xff0c;但是不能实现在双击时异步加载数据&#xff0c;本文就是站在了巨人的肩膀上实现的异步加载的树状表格~1. 使用说明本组件基于treetable.js…

EchoServer

using System;using System.Net.Sockets;using System.IO;using System.Net; namespace ConsoleApplication1{ class EchoServer { public static void Main11() { // TcpListener监听端口1234 IPAddress ipAd IPAddress.Parse(&qu…

hive - 解析 json

内置函数&#xff1a;get_json_object(json串,解析路径) 解析路径说明&#xff1a; $ :跟对象 . :子对象 [] :数组下标 * :所有 举例&#xff1a; 数据样例&#xff1a; {"movie":"1190","rate":"4.8","timestamp":…

[scikit-learn 机器学习] 6. 逻辑回归

文章目录1. 逻辑回归二分类2. 垃圾邮件过滤2.1 性能指标2.2 准确率2.3 精准率、召回率2.4 F1值2.5 ROC、AUC3. 网格搜索调参4. 多类别分类5. 多标签分类5.1 多标签分类性能指标本文为 scikit-learn机器学习&#xff08;第2版&#xff09;学习笔记逻辑回归常用于分类任务 1. 逻…

libsvm回归参数寻优cgp_【lightgbm/xgboost/nn代码整理二】xgboost做二分类,多分类以及回归任务...

1.简介该部分是代码整理的第二部分&#xff0c;为了方便一些初学者调试代码&#xff0c;作者已将该部分代码打包成一个工程文件&#xff0c;包含简单的数据处理、xgboost配置、五折交叉训练和模型特征重要性打印四个部分。数据处理部分参考&#xff1a;代码整理一&#xff0c;这…

hive - 可优化的 10 个地方及详解

1.合理选择排序 排序算法比较耗资源&#xff0c;应根据业务需要选择 order by :全局排序&#xff0c;大数据集会消耗太过漫长的时间sort by&#xff1a;局部排序&#xff0c;只能保证每个reducer的输出数据都是有序的distribute by&#xff1a;分桶不排序&#xff0c;控制map…

[scikit-learn 机器学习] 7. 朴素贝叶斯

文章目录1. 朴素贝叶斯2. NB 与 逻辑回归对比本文为 scikit-learn机器学习&#xff08;第2版&#xff09;学习笔记相关知识参考&#xff1a;《统计学习方法》朴素贝叶斯法&#xff08;Naive Bayes&#xff0c;NB&#xff09; 1. 朴素贝叶斯 通过最大概率来预测类&#xff1a…

堕落的时候看看——清华大学老师的一席话

一双鞋&#xff0c;耐克的6百多&#xff1b;李宁的4百多&#xff1b;特步的3百多&#xff1b;361的2百多&#xff1b;所以&#xff0c;你毕业于一个什么样的大学很重要。 一双鞋&#xff0c;在地摊不过几十元&#xff0c;到了商场、专卖店&#xff0c;会涨到一百甚至几百。所以…

塔菲克蓝牙适配器驱动_小身材,大功能,biaze毕亚兹USB蓝牙适配器开箱体验

在日常生活中&#xff0c;我们平时使用的台式电脑或是笔记本电脑&#xff0c;想要传输数据或者音频的时候&#xff0c;都是需要借助数据传输线或是U盘等传输设备&#xff0c;使用过程可想而知&#xff0c;有点麻烦。我们都知道&#xff0c;手机是有蓝牙传输功能的&#xff0c;只…

MySQL - cast()函数

日常建表习惯用 create tabel tb_name as select......&#xff0c;这种建表方式的其中一个缺点就是&#xff1a;系统会根据查询出的字段&#xff0c;定义字段类型。有时候会把 %Y-%m-%d 格式的日期字段定义为 varchar 。建模的时候苦不堪言。 那么怎么在建表过程中自己定义每…

HDU1003——MAX SUM

简单DP&#xff0c;状态转移公式&#xff1a;num[j].data max{num[j].data, num[j].datanum[j-1].data}&#xff0c;也就是保证加上前一个数不失自己的值减小。 View Code #include <stdio.h>#define N 100010#define inf 9999999struct _num{int data;int pre;int nex…

[scikit-learn 机器学习] 8. 非线性分类和决策树

文章目录1. 特征选择标准2. 网页广告预测2.1 数量处理2.2 网格搜索模型参数3. 决策树优缺点本文为 scikit-learn机器学习&#xff08;第2版&#xff09;学习笔记相关知识&#xff1a;《统计学习方法》决策树&#xff08;Decision Tree&#xff0c;DT&#xff09; 1. 特征选择…

智慧新泰时空大数据与云平台_智慧警务大数据云平台开发情报研判系统解决方案...

智慧公安作为公安信息化开展到高级阶段的一种警务形态&#xff0c;“智慧公安”主要采用物联网、云计算、无线通讯、智能动态感知分析等新一代信息技术,将公安工作IT根底设备与物理设备、人际环境等高度交融,以提供智能化公安决策与效劳。智慧警务大数据云平台开发情报研判系统…

RGB颜色查询对照表#FFFFFF

大致是下图这样的&#xff0c;有需要的可以点击下面的连接复制使用&#xff1a; https://www.114la.com/other/rgb.htm

ikbc机械键盘打字出现重复_超小无线机械键盘,绝佳移动打字体验

NuType筹资信息产品名称NuType上线平台Kickstarter发起团队NUPHY发起地区中国香港目标金额80,000HKD筹集金额1,301,212HKD完全进度1,627%支持人数1,612最低价格697HKD上线时间2019/11/13-2019/12/28创次方/制表时间&#xff1a;2019年12月28日文/大智笔电键盘的打字体验远不及桌…

英语语法之形容词从句:定语从句

形容词从句:定语从句 限制和非限制性定语从句 ----------------------------------------------------------------------------- 限制和非限制性定语从句: 限制性定语从句是名词词组不可缺少的一个组成部分,去掉了会造成病句或意义不明确; 非限制性定语从句属于补充说明性质…

MySQL - 定时任务(每天凌晨1点、每小时、每分钟、某一时间点)

常用的一定要写在前面 # 从2019-10-11开始&#xff0c;每天的00:30:00执行定时任务 ON SCHEDULE EVERY 1 DAY STARTS 2019-10-11 00:30:00 # 每天的凌晨1点执行定时任务 ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)# 特…