题目描述
如果一个字符串不含有任何重复字符,我们称这个字符串为 好 字符串。
给你一个字符串 s
,请你返回 s
中长度为 3 的 好子字符串 的数量。
注意,如果相同的好子字符串出现多次,每一次都应该被记入答案之中。
子字符串 是一个字符串中连续的字符序列。
样例
输入:s = "xyzzaz"
输出:1
解释:总共有 4 个长度为 3 的子字符串:"xyz","yzz","zza" 和 "zaz"。
唯一的长度为 3 的好子字符串是 "xyz"。
输入:s = "aababcabc"
输出:4
解释:总共有 7 个长度为 3 的子字符串:"aab","aba","bab","abc","bca","cab" 和 "abc"。
好子字符串包括 "abc","bca","cab" 和 "abc"。
限制
1 <= s.length <= 100
s
只包含小写英文字母。
算法
(暴力枚举) $O(n)$
- 遍历字符串枚举。
时间复杂度
- 每个字符都被遍历最多三次,故总时间复杂度为 $O(n)$。
空间复杂度
- 仅需要常数的额外空间。
C++ 代码
class Solution {
public:
int countGoodSubstrings(string s) {
const int n = s.size();
int ans = 0;
for (int i = 0; i < n - 2; i++)
if (s[i] != s[i + 1] && s[i] != s[i + 2] && s[i + 1] != s[i + 2])
ans++;
return ans;
}
};