leetcode每日一题(Golang)2022-12-26 1759. 统计同构子字符串的数目 (middle)

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)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值