题意:
给你一个字符串 s ,返回 s 中 同构子字符串 的数目。由于答案可能很大,只需返回对 109 + 7 取余 后的结果。
同构字符串 的定义为:如果一个字符串中的所有字符都相同,那么该字符串就是同构字符串。
子字符串 是字符串中的一个连续字符序列。
数据范围:
1 <= s.length <= 1e5
s 由小写字符串组成
解法:
求每一段同构字符串的最大长度,设长度为cnt,那么ans+=cnt*(cnt+1)/2,
因为长度为cnt的串中,包含长度为1的有cnt个,长度为2的cnt-1个...长度为cnt的一个,
是公差为1的等差数列,=1+2+...cnt=cnt*(cnt+1)/2.
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6fa8f5e23fdf0c77bf320fe2cb91ad97.png)
code:
class Solution {
public:
const static int mod=1e9+7;
int countHomogenous(string s) {
int ans=0;
char last=-1;
int cnt=0;
for(auto i:s){
if(i==last)cnt++;
else{
ans+=1ll*cnt*(cnt+1)/2%mod;
ans%=mod;
cnt=1;
last=i;
}
}
if(cnt){
ans+=1ll*cnt*(cnt+1)/2%mod;
ans%=mod;
}
return ans;
}
};