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

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

  1. 828. 统计子串中的唯一字符

    我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数. 例如:s = "LEETCODE" ,则其中 "L&q ...

  2. 365天挑战LeetCode1000题——Day 081 统计子串中的唯一字符 地图分析 太平洋大西洋水流问题

    828. 统计子串中的唯一字符 按贡献值,也就是每个字符可能在多少个字符串中出现来进行计算,大大降低了复杂度 代码实现(部分看题解) class Solution {public:int unique ...

  3. 数据结构源码笔记(C语言):统计字符串中出现的字符及其次数

    //统计一个字符串中出现的字符及其次数 #include<stdio.h> #include<malloc.h> #include<string.h>#define ...

  4. python统计中英文字符_如何统计文本中的中英文字符数?Python帮你解决

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于小蚊子数据分析 ,作者小蚊子数据分析 代码 1import stri ...

  5. 【代码】【有统计错误,待修改】统计文件中,不同字符出现的次数(未排序)

    # coding=gbk ''' Created on 2015年12月9日@author: Ryan ''' # 统计文件中,不同字符出现的次数(未排序)import MyDef tag = 1 i ...

  6. 统计字符串中每种字符类型的个数demo

    /** 统计字符串中每中字符类型的个数,思路:* 1.键盘录入一个字符串* 2.获取到每个字符,遍历字符串* for (int i = 0; i < s.length(); i++) {char ...

  7. LeetCode 2062. 统计字符串中的元音子字符串

    文章目录 1. 题目 2. 解题 1. 题目 子字符串 是字符串中的一个连续(非空)的字符序列. 元音子字符串 是 仅 由元音('a'.'e'.'i'.'o' 和 'u')组成的一个子字符串,且必须包 ...

  8. LeetCode 1617. 统计子树中城市之间最大距离(枚举所有可能+图的最大直径)

    文章目录 1. 题目 2. 解题 1. 题目 给你 n 个城市,编号为从 1 到 n .同时给你一个大小为 n-1 的数组 edges ,其中 edges[i] = [ui, vi] 表示城市 ui ...

  9. Python统计字符串中的中英文字符、数字空格,特殊字符

    # -*- coding:utf8 -*-import stringfrom collections import namedtuple def str_count(s): '''找出字符串中的中英文 ...

最新文章

  1. 微信确认出Bug,目前已全部恢复
  2. 访问一个HTTPS的网站的大致流程
  3. python zipfile模块 ZIP64
  4. LeetCode 893. 特殊等价字符串组
  5. react native ios 上架
  6. EFGrid ---- copy 属性
  7. layer 弹出框(iframe层)父子页面传值
  8. html 内容不被父级包住,解决:父级元素不能被子元素内容撑开的解决办法,父级元素没有高度的解决办法...
  9. java家庭账本_java家庭记账系统
  10. 【转】大数据【五十八】探索MapReduce过程及分组详解
  11. tensorflow中的一些基本函数
  12. 海康、大华网络摄像机RTSP流接入流媒体实现WEB无插件直播通过视频广场观看实时直播
  13. Orcal数据库中ORA-01861: 文字与格式字符串不匹配
  14. 体育馆团体预约系统UML软件工程第16周项目日志
  15. 测试阶段划分为哪几个阶段?
  16. Axure RP 原型设计专业软件
  17. Socket 套接字-通信方式
  18. 单代号网络图计算例题_阀门上面的代号表示什么,看完就懂了~~
  19. 机载雷达导论(第29~36章)
  20. 深入分析Java Web-02-Java的I/O

热门文章

  1. qt android glsl,基于Qt的OpenGL学习(1)—— Hello Triangle
  2. sudo apt-get nmap 报错锁占用
  3. Linux进程全解4——fork创建子进程
  4. matlab中二维插值函数interp2的使用
  5. java join 异常_Java:守护进程:thread.join()没有完成,当在一个线程中抛出异常时...
  6. 使用export/import导出和导入docker容器
  7. C/C++中的声明与定义
  8. 一台服务器上部署多个Terracotta的方法
  9. C#4.0 Collections【集合】
  10. [翻译] python Tutorial 之一