1358. 包含所有三种字符的子字符串数目
给你一个字符串 s ,它只包含三种字符 a, b 和 c 。
请你返回 a,b 和 c 都 至少 出现过一次的子字符串数目。
示例 1:
输入:s = “abcabc”
输出:10
解释:包含 a,b 和 c 各至少一次的子字符串为 “abc”, “abca”, “abcab”, “abcabc”, “bca”, “bcab”, “bcabc”, “cab”, “cabc” 和 “abc” (相同字符串算多次)。
示例 2:
输入:s = “aaacb”
输出:3
解释:包含 a,b 和 c 各至少一次的子字符串为 “aaacb”, “aacb” 和 “acb” 。
示例 3:
输入:s = “abc”
输出:1
解题代码如下:
int numberOfSubstrings(char * s){
int count=0;
int slen=strlen(s);
int r[3];
r[1]=0;
r[2]=0;
r[0]=0;
int low=0,high=0;
while(s[low]!='\0'){
if(s[high]!='\0'){
r[s[high]-'a']++;
high++;
}
else{
low++;
}
while(r[0]>=1&&r[1]>=1&&r[2]>=1&&s[low]!='\0'){
printf("%d ",low);
count=count+slen-high+1;
r[s[low]-'a']--;
low++;
}
if(s[high]=='\0'){
break;
}
}
return count;
}