2022-12-26 1759. 统计同构子字符串的数目 (middle)
🚩 学如逆水行舟,不进则退。 —— 《增广贤文》
题目描述:
给你一个字符串 s ,返回 s 中 同构子字符串 的数目。由于答案可能很大,只需返回对 10(9) + 7 取余 后的结果。 同构字符串
的定义为:如果一个字符串中的所有字符都相同,那么该字符串就是同构字符串。 子字符串 是字符串中的一个连续字符序列。
测试用例:
输入: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
分析:
不难看出连续一个子串的分数为1,两个为3,三个为6,四个为10,连续数每增加一以前的数量都会加一
例如目前3个c:
c:3 cc:2 ccc:1
当加入一个c后:
c:4 cc:3 ccc:2 cccc:1
所以通过这个规律可以写出一次遍历加while循环求得答案
- 代码:
func countHomogenous(s string) int {
ans:=0
l:=len(s)
for idx:=0;idx<l;idx++{
cnt:=0
for idx+cnt<l && s[idx+cnt]==s[idx]{
ans=ans+1+cnt
cnt+=1
}
idx+=cnt-1
}
return ans%(1e9 + 7)
}