网站管理助手建站教程浏览器打开网站
题目:
给你一个字符串 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
最重要的是这个公式,一个长度为 m 的字符串的子字符串的数目为
2m×(m+1)
因为对于每一个同质字符串,它的字符串都是同质字符串,而我们可以对原字符串中的每一组同质字符串进行计算
class Solution {
public:
const int MOD = 1e9 + 7;int countHomogenous(string s) {long long ans=0;int slen=s.size();int i=0;while(i<slen){int j=i;while(i<slen-1&&s[i]==s[i+1]){i++;}int num=i-j+1;ans+=(long long)num*(num+1)/2;i++;}return ans%MOD;}
};