AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

LeetCode 3305. 元音辅音字符串计数 I    原题链接    中等

作者: 作者的头像   wzc1995 ,  2024-10-08 11:43:34 ,  所有人可见 ,  阅读 17


1


题目描述

给你一个字符串 word 和一个 非负 整数 k。

返回 word 的 子字符串 中,每个元音字母('a'、'e'、'i'、'o'、'u')至少 出现一次,并且 恰好 包含 k 个辅音字母的子字符串的总数。

样例

输入:word = "aeioqq", k = 1

输出:0

解释:

不存在包含所有元音字母的子字符串。
输入:word = "aeiou", k = 0

输出:1

解释:

唯一一个包含所有元音字母且不含辅音字母的子字符串是 word[0..4],即 "aeiou"。
输入:word = "ieaouqqieaouqq", k = 1

输出:3

解释:

包含所有元音字母并且恰好含有一个辅音字母的子字符串有:

word[0..5],即 "ieaouq"。
word[6..11],即 "qieaou"。
word[7..12],即 "ieaouq"。

限制

  • 5 <= word.length <= 250
  • word 仅由小写英文字母组成。
  • 0 <= k <= word.length - 5

算法

(暴力枚举) $O(n^2)$
  1. 枚举子字符串的左端点。
  2. 枚举每个左端点对应的右端点,过程中记录当前子串中是否有所有的元音字母,以及辅音字母的个数。
  3. 如果当前子串符合答案,则累加答案。

时间复杂度

  • 遍历所有子串,故时间复杂度为 $O(n^2)$。

空间复杂度

  • 仅需要常数的额外空间。

C++ 代码

class Solution {
public:
    int countOfSubstrings(string word, int k) {
        const int n = word.size();

        int ans = 0;
        for (int l = 0; l < n; l++) {
            int t = 0;
            bool a, e, i, o, u;
            a = e = i = o = u = false;

            for (int r = l; r < n && t <= k; r++) {
                if (word[r] == 'a') a = true;
                else if (word[r] == 'e') e = true;
                else if (word[r] == 'i') i = true;
                else if (word[r] == 'o') o = true;
                else if (word[r] == 'u') u = true;
                else ++t;

                if (a && e && i && o && u && t == k)
                    ++ans;
            }
        }

        return ans;
    }
};

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息