力扣刷题——1759.统计同质字符串的数目
题目:
给你一个字符串 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;
}
};