Leetcode 第 417 场周赛题解

devtools/2024/10/10 23:53:13/

Leetcode 第 417 场周赛题解

  • Leetcode 第 417 场周赛题解
    • 题目1:3304. 找出第 K 个字符 I
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:3305. 元音辅音字符串计数 I
      • 思路
      • 代码
      • 复杂度分析
    • 题目3:3306. 元音辅音字符串计数 II
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:3307. 找出第 K 个字符 II
      • 思路
      • 代码
      • 复杂度分析

Leetcode 第 417 场周赛题解

题目1:3304. 找出第 K 个字符 I

思路

模拟字符串的构造。在执行足够多的操作后, word 中 至少 存在 k 个字符,此时返回 word 中第 k 个字符的值。

代码

/** @lc app=leetcode.cn id=3304 lang=cpp** [3304] 找出第 K 个字符 I*/// @lc code=start
class Solution
{
public:char kthCharacter(int k){string s = "a";while (s.length() < k){int len = s.length();for (int i = 0; i < len; i++)s += s[i] + 1;}return s[k - 1];}
};
// @lc code=end

复杂度分析

时间复杂度:O(logk)。

空间复杂度:O(1)。

题目2:3305. 元音辅音字符串计数 I

思路

利用滑动窗口取区间为 [left, right] 的 word 的子字符串,判断其是否每个元音字母(‘a’、‘e’、‘i’、‘o’、‘u’)至少出现一次,并且恰好包含 k 个辅音字母。

代码

/** @lc app=leetcode.cn id=3305 lang=cpp** [3305] 元音辅音字符串计数 I*/// @lc code=start
class Solution
{
public:int countOfSubstrings(string word, int k){int n = word.length();unordered_set<char> vowels = {'a', 'e', 'i', 'o', 'u'};int count = 0;for (int left = 0; left + 5 + k <= n; left++){int notVowel = 0;unordered_set<char> foundVowels; // 存放当前找到的元音字母for (int right = left; right < n; right++){char c = word[right];if (vowels.count(c))foundVowels.insert(c);elsenotVowel++;if (foundVowels.size() == 5 && notVowel == k)count++;}}return count;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n2),其中 n 是字符串 word 的长度。

空间复杂度:O(1)。

题目3:3306. 元音辅音字符串计数 II

思路

问题等价于如下两个问题:

  • 每个元音字母至少出现一次,并且至少包含 k 个辅音字母的子串个数。记作 fk
  • 每个元音字母至少出现一次,并且至少包含 k+1 个辅音字母的子串个数。记作 fk+1

二者相减,所表达的含义就是恰好包含 k 个辅音字母了,所以答案为 fk - fk+1

代码

/** @lc app=leetcode.cn id=3306 lang=cpp** [3306] 元音辅音字符串计数 II*/// @lc code=start
class Solution
{
private:const unordered_set<char> vowels = {'a', 'e', 'i', 'o', 'u'};public:long long countOfSubstrings(string word, int k){return f(word, k) - f(word, k + 1);}// 辅函数long long f(string &word, int k){long long ans = 0;// 这里用哈希表实现,替换成数组会更快unordered_map<char, int> cnt1; // 每种元音的个数int cnt2 = 0;                  // 辅音个数int left = 0;for (char &c : word){if (vowels.count(c))cnt1[c]++;elsecnt2++;while (cnt1.size() == 5 && cnt2 >= k){char out = word[left];if (vowels.count(out)){if (--cnt1[out] == 0)cnt1.erase(out);}elsecnt2--;left++;}ans += left;}return ans;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 是字符串 word 的长度。

空间复杂度:O(1) 或者 O(∣Σ∣),其中 ∣Σ∣=21。

题目4:3307. 找出第 K 个字符 II

思路

倒序遍历 operations。当 k 在字符串的右半边,也就是 k>2i 时,把 inc 增加 operations[i]。

代码

/** @lc app=leetcode.cn id=3307 lang=cpp** [3307] 找出第 K 个字符 II*/// @lc code=start
class Solution
{
public:char kthCharacter(long long k, vector<int> &operations){int inc = 0;for (int i = __lg(k - 1); i >= 0; i--){if (k > (1LL << i)){// k 在右半边inc += operations[i];k -= (1LL << i);}}return 'a' + inc % 26;}
};
// @lc code=end

复杂度分析

时间复杂度:O(logk)。

空间复杂度:O(1)。


http://www.ppmy.cn/devtools/122002.html

相关文章

深入计算机语言之C++:C到C++的过度

&#x1f511;&#x1f511;博客主页&#xff1a;阿客不是客 &#x1f353;&#x1f353;系列专栏&#xff1a;从C语言到C语言的渐深学习 欢迎来到泊舟小课堂 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 一、什么是C C&#xff08;c plus plus&#xff…

【GEE学习第三期】GEE常用函数总结

【GEE学习第三期】GEE常用函数总结 数据统计类ee.List.sequence函数 图像处理类ee.Geometry类‌defaultVisualizationVis函数 数据输入输出数值与绘图导出影像 参考 数据统计类 ee.List.sequence函数 用法如下&#xff1a; ee.List.sequence &#xff08;开始&#xff0c;结…

8.使用 VSCode 过程中的英语积累 - Help 菜单(每一次重点积累 5 个单词)

前言 学习可以不局限于传统的书籍和课堂&#xff0c;各种生活的元素也都可以做为我们的学习对象&#xff0c;本文将利用 VSCode 页面上的各种英文元素来做英语的积累&#xff0c;如此做有 3 大利 这些软件在我们工作中是时时刻刻接触的&#xff0c;借此做英语积累再合适不过&a…

用Python和OpenCV实现人脸识别:构建智能识别系统

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 人脸识别技术在现代社会的各个领域得到了广泛应用,从智能手机的面部解锁到公共场所的安全监控,人脸识别已经成为一项日益重要的技术。本教程将指导你使用Python中的OpenCV库来构建一个简单的人脸检测与识别系统…

ELK--收集日志demo

ELK--收集日志demo 安装ELK日志收集配置启动容器springboot配置测试 之前项目多实例部署的时候&#xff0c;由于请求被负载到任意节点&#xff0c;所以查看日志是开多个终端窗口。后来做了简单处理&#xff0c;将同一项目的多实例日志存入同一个文件&#xff0c;由于存在文件锁…

如何使用ssm实现基于在线开放课程的Web前端设计与实现+vue

TOC ssm746基于在线开放课程的Web前端设计与实现vue 绪论 1.1 选题背景 当人们发现随着生产规模的不断扩大&#xff0c;人为计算方面才是一个巨大的短板&#xff0c;所以发明了各种计算设备&#xff0c;从结绳记事&#xff0c;到算筹&#xff0c;以及算盘&#xff0c;到如今…

MySQL 临时表

MySQL 临时表 引言 在数据库管理中&#xff0c;临时表是一种非常有用的工具&#xff0c;尤其是在进行复杂的数据处理和查询时。MySQL 作为一种流行的关系型数据库管理系统&#xff0c;提供了对临时表的支持。本文将详细介绍 MySQL 临时表的概念、用途、创建方法以及管理技巧。…

uniapp学习(002 常用的内置组件)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第5p-第p10的内容 文章目录 view组件相当于div标签按下松开例子冒泡例子 text组件 相当于span标签scroll-view纵…