网站建设意见建议免费发布广告信息平台
目录
- 一、题目
- 二、思路
- 2.1 解题思路
- 2.2 代码尝试
- 2.3 疑难问题
- 三、解法
- 四、收获
- 4.1 心得
- 4.2 举一反三
一、题目
二、思路
2.1 解题思路
滑动窗口+哈希表
2.2 代码尝试
class Solution {
public:int numberOfSubstrings(string s) {int l=0;int len=s.size();int count=0;//用哈希表来存储出现次数vector<int> p(3);//3个字母for(int r=0;r<s.size();r++){p[s[r]-'a']++;//每次遍历,对应哈希表+1if(p[0]*p[1]*p[2]!=0){count+=len-r;p[s[l]-'a']--;l++;}}while(p[0]*p[1]*p[2]>0){count++;p[s[l]-'a']--;l++;}return count;}
};
能解出部分题目,感觉逻辑判断上差了一点,不能满足很多种情况。不过基本的路线应该没错,哈希表做判断。这道题有点变化,我感觉还是判断条件没找准。结构还是模板题。
2.3 疑难问题
三、解法
class Solution {int cnt[3];
public:int numberOfSubstrings(string s) {int len=(int)s.length(),ans=0;cnt[0]=cnt[1]=cnt[2]=0;for (int l=0,r=-1;l<len;){while (r<len && !(cnt[0]>=1 && cnt[1]>=1 && cnt[2]>=1)){if (++r==len) break;cnt[s[r]-'a']++;}ans+=len-r;cnt[s[l++]-'a']--;}return ans;}
};作者:力扣官方题解
链接:https://leetcode.cn/problems/number-of-substrings-containing-all-three-characters/solutions/109170/bao-han-suo-you-san-chong-zi-fu-de-zi-zi-fu-chuan-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
四、收获
4.1 心得
这题变化就在于之前每次都是窗口右边一点一点的动,然后左边快速收敛直至满足窗口条件。但是这道题变化的就是左边一点一点动,右边快速统计直到末尾。这道题变化的很好。
4.2 举一反三
尺蠖向哪边蠕动要看具体的规则判断情况。