开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情
题目 leetcode.cn/
- 如果一个字符串不含有任何重复字符,我们称这个字符串为 好 字符串。
- 给你一个字符串
s,请你返回s中长度为 3 的 好子字符串 的数量。 - 注意,如果相同的好子字符串出现多次,每一次都应该被记入答案之中。
- 子字符串 是一个字符串中连续的字符序列。
示例
-
示例 1:
- 输入: s = "xyzzaz"
- 输出: 1
- 解释: 总共有 4 个长度为 3 的子字符串:"xyz","yzz","zza" 和 "zaz" 。
- 唯一的长度为 3 的好子字符串是 "xyz" 。
-
示例 2:
- 输入: s = "aababcabc"
- 输出: 4
- 解释: 总共有 7 个长度为 3 的子字符串:"aab","aba","bab","abc","bca","cab" 和 "abc" 。
- 好子字符串包括 "abc","bca","cab" 和 "abc" 。
提示
1 <= s.length <= 100s只包含小写英文字母。
代码
function countGoodSubstrings(s: string): number {
if(s.length < 3) return 0;
let count = 0;
for(let k = 0; k < s.length - 2; k++){
if(s[k] !== s[k+1] && s[k+1] !== s[k+2] && s[k] !== s[k+2]){
count++;
}
}
return count;
};
- 暴力解法:
- 首先排除字符串长度小于
3的字符串,一定是不包括符合要求的好子字符串 - 然后定义一个统计符合要求的计数器变量。遍历整个字符串,将字符串的每个字符依次取出,每次比较当前项和后两项的单个字符,看是否存在相同的英文字符。如果不存在,则统计为一个符合要求的子字符串。最后返回统计完的结果
- 时间复杂度:
O(n),其中n为s的长度。我们遍历了一遍字符串,对于每个下标为i且长度为3的子字符串,判断其是不是好子字符串的时间复杂度为O(1)。 - 空间复杂度:
O(1)。
- 首先排除字符串长度小于