电子商务网站建设的一般过程,长春财经学院是公办还是民办,福建新闻最新消息,定制网站建设服务商本文属于「征服LeetCode」系列文章之一#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁#xff0c;本系列将至少持续到刷完所有无锁题之日为止#xff1b;由于LeetCode还在不断地创建新题#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章… 本文属于「征服LeetCode」系列文章之一这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁本系列将至少持续到刷完所有无锁题之日为止由于LeetCode还在不断地创建新题本系列的终止日期可能是永远。在这一系列刷题文章中我不仅会讲解多种解题思路及其优化还会用多种编程语言实现题解涉及到通用解法时更将归纳总结出相应的算法模板。 为了方便在PC上运行调试、分享代码文件我还建立了相关的仓库https://github.com/memcpy0/LeetCode-Conquest。在这一仓库中你不仅可以看到LeetCode原题链接、题解代码、题解文章链接、同类题目归纳、通用解法总结等还可以看到原题出现频率和相关企业等重要信息。如果有其他优选题解还可以一同分享给他人。 由于本系列文章的内容随时可能发生更新变动欢迎关注和收藏征服LeetCode系列文章目录一文以作备忘。 给你一个字符串 s 返回 s 中 同质子字符串 的数目。由于答案可能很大只需返回对 109 7 取余 后的结果。
同质字符串 的定义为如果一个字符串中的所有字符都相同那么该字符串就是同质字符串。
子字符串 是字符串中的一个连续字符序列。
示例 1
输入s abbcccaa
输出13
解释同质子字符串如下所列
a 出现 3 次。
aa 出现 1 次。
b 出现 2 次。
bb 出现 1 次。
c 出现 3 次。
cc 出现 2 次。
ccc 出现 1 次。
3 1 2 1 3 2 1 13示例 2
输入s xy
输出2
解释同质子字符串是 x 和 y 。示例 3
输入s zzzzz
输出15提示
1 s.length 10^5s 由小写字符串组成 解法 遍历
题目给出一个长度为 n n n 的字符串 s s s 并给出「同构字符串」的定义为如果一个字符串中的所有字符都相同那么该字符串就是同构字符串。现在要求 s s s 中「同构子字符串」的数目。
因为「同构子字符串」为一个连续的字符序列、且需要序列中的字符都相同那么首先按照连续相同的字符来对字符串 s s s 进行分组比如对于字符串 “abbcccaa \text{abbcccaa} “abbcccaa 分组结果为 [a,bb,ccc,aa] \text{[a,bb,ccc,aa]} [a,bb,ccc,aa] 。因为一个组中字符串的任意子串都为「同构子字符串」而一个长度为 m m m 的字符串的子字符串的数目为 m × ( m 1 ) 2 \dfrac{m \times (m 1)}{2} 2m×(m1) 。那么对每个组统计其贡献的「同构子字符串」数目并求和即可。
class Solution {
public:int countHomogenous(string s) {const int mod 1e9 7;int ans 0;for (int n s.size(), i 0, cnt 0; i n; i) {if (i ! 0 s[i] s[i - 1]) cnt;else cnt 1;ans (ans cnt) % mod;}return ans;}
};复杂度分析
时间复杂度 O ( n ) O(n) O(n)空间复杂度 O ( n ) O(n) O(n)