LeetCode 1759. 统计同质子字符串的数目【字符串】1490

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。

为了方便在PC上运行调试、分享代码文件,我还建立了相关的仓库:https://github.com/memcpy0/LeetCode-Conquest。在这一仓库中,你不仅可以看到LeetCode原题链接、题解代码、题解文章链接、同类题目归纳、通用解法总结等,还可以看到原题出现频率和相关企业等重要信息。如果有其他优选题解,还可以一同分享给他人。

由于本系列文章的内容随时可能发生更新变动,欢迎关注和收藏征服LeetCode系列文章目录一文以作备忘。

给你一个字符串 s ,返回 s同质子字符串 的数目。由于答案可能很大,只需返回对 109 + 7 取余 后的结果。

同质字符串 的定义为:如果一个字符串中的所有字符都相同,那么该字符串就是同质字符串。

子字符串 是字符串中的一个连续字符序列。

示例 1:

js 复制代码
输入: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:

js 复制代码
输入:s = "xy"
输出:2
解释:同质子字符串是 "x" 和 "y" 。

示例 3:

js 复制代码
输入:s = "zzzzz"
输出:15

提示:

  • 1 <= s.length <= 10^5
  • s 由小写字符串组成

解法 遍历

题目给出一个长度为 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×(m+1) 。那么对每个组统计其贡献的「同构子字符串」数目并求和即可。

cpp 复制代码
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)
相关推荐
yagamiraito_8 小时前
757. 设置交集大小至少为2 (leetcode每日一题)
算法·leetcode·go
程序员杰哥8 小时前
Python自动化测试之线上流量回放:录制、打标、压测与平台选择
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·压力测试
星释9 小时前
Rust 练习册 57:阿特巴什密码与字符映射技术
服务器·算法·rust
无敌最俊朗@9 小时前
力扣hot100-141.环形链表
算法·leetcode·链表
WWZZ202511 小时前
快速上手大模型:深度学习10(卷积神经网络2、模型训练实践、批量归一化)
人工智能·深度学习·神经网络·算法·机器人·大模型·具身智能
sali-tec12 小时前
C# 基于halcon的视觉工作流-章62 点云采样
开发语言·图像处理·人工智能·算法·计算机视觉
fashion 道格12 小时前
用 C 语言玩转归并排序:递归实现的深度解析
数据结构·算法·排序算法
九年义务漏网鲨鱼14 小时前
蓝桥杯算法——状态压缩DP
算法·职场和发展·蓝桥杯
CappuccinoRose14 小时前
MATLAB学习文档(二十八)
开发语言·学习·算法·matlab
Freedom_my14 小时前
插入排序算法
数据结构·算法·排序算法