力扣(LeetCode)1759. 统计同构子字符串的数目(C++)
创始人
2024-05-01 06:01:02

题目描述

pp

双指针数学

根据同构字符串的定义,还有示例,发现同构子字符串的数量,只和字母相同的区间有关。如abbcccaa,有 444 个影响答案的区间,直观切分为a bb ccc aa,用空格划分区间。遍历的任务就是维护这些区间,通过区间长度,维护答案。本题的滑动窗口①_①①​维护字母相同的连续字符串。

区间与答案的关系 : 考虑如何划分子字符串,可以按照长度,划分为单字母,双字母 …\dots… 整个区间。由于连续的要求,对应的子字符串数量 : 1->len , 2->len-1 , 3->len-2 ... len-1->2 , len->1,箭头左侧是子字符串长度,右侧是子字符串数量。

名词解释

①滑动窗口 : 遍历字符串,维护连续区间的算法,称为滑动窗口,是双指针的经典应用。

核心代码

class Solution {
public:int countHomogenous(string s) {int l = 0,r = 0;int ans = 0;const int mod = 1e9+7;while(rwhile(s[r]==s[l]) r++;int len = r-l;ans =(ans + (long long)(len+1)*len/2)%mod;l = r;}return (ans+(long long)(r-l+1)*(r-l)/2)%mod;}
};
  1. 时间复杂度 : O(n)O(n)O(n) , nnn 是字符串长度,一次遍历维护滑动窗口的时间复杂度 O(n)O(n)O(n) 。
  2. 空间复杂度 : O(1)O(1)O(1) , 只使用常量级空间 。

AC

AC

致语

  • 理解思路很重要!
  • 欢迎读者在评论区留言,墨染看到就会回复的。

相关内容

热门资讯

最新或2023(历届)阜阳市五... 中央电视台记者:现在社会上降低“五险一金”的呼吁是比较集中的,如果一个职工工资条上一个月收入是800...
最新或2023(历届)滁州市... 本文主要介绍最新或2023(历届)最新滁州市五险一金缴纳相关注意事项。包括滁州市五险一金缴纳比例,滁...
袁崇焕到底怎么死的?他死于崇祯... 嗨又和大家见面了,今天趣历史小编带来了一篇关于袁崇焕的文章,希望你们喜欢。人们大多将袁崇焕的死因归责...
亲爱的翻译官44集张翘楚会告诉... 《亲爱的翻译官》44集预告中,程母张翘楚知道了文晓华假失聪的事情,但是居然没有告诉程家阳,却又忽然态...
韩剧信号结局对讲机接通的人是谁... 韩剧《信号》自开播就获得中国网友的喜欢,在豆瓣上评分9.2,更高过了8.5的《太阳的后裔》,《信号》...