河南省建设厅职称网站,百度快照优化排名推广,网站建设sem,郑州网站建设制作公司图源#xff1a;文心一言
上机题目练习整理#xff0c;本篇作为字符串容器的代码#xff0c;提供了常规解法及其详细解释#xff0c;供小伙伴们参考~#x1f95d;#x1f95d;
第1版#xff1a;在力扣新手村刷题的记录~#x1f9e9;#x1f9e9; 方法#xff1a;常…
图源文心一言
上机题目练习整理本篇作为字符串容器的代码提供了常规解法及其详细解释供小伙伴们参考~
第1版在力扣新手村刷题的记录~ 方法常规枚举解法~
编辑梅头脑
审核文心一言
题目2586. 统计范围内的元音字符串数 - 力扣LeetCode 目录
统计元音内的范围字符串数
题目
方法一常规枚举解法
结语 统计元音内的范围字符串数
题目 给你一个下标从 0 开始的字符串数组 words 和两个整数left 和 right 。 如果字符串以元音字母开头并以元音字母结尾那么该字符串就是一个 元音字符串 其中元音字母是 a、e、i、o、u 。 返回 words[i] 是元音字符串的数目其中 i 在闭区间 [left, right] 内。 示例 1 输入words [are,amy,u], left 0, right 2
输出2
解释
- are 是一个元音字符串因为它以 a 开头并以 e 结尾。
- amy 不是元音字符串因为它没有以元音字母结尾。
- u 是一个元音字符串因为它以 u 开头并以 u 结尾。
在上述范围中的元音字符串数目为 2 。示例 2 输入words [hey,aeo,mu,ooo,artro], left 1, right 4
输出3
解释
- aeo 是一个元音字符串因为它以 a 开头并以 o 结尾。
- mu 不是元音字符串因为它没有以元音字母开头。
- ooo 是一个元音字符串因为它以 o 开头并以 o 结尾。
- artro 是一个元音字符串因为它以 a 开头并以 o 结尾。
在上述范围中的元音字符串数目为 3 。 方法一常规枚举解法
算法思路 算法思想在 [left,right]范围内枚举给定字符串数组 words 中的字符串并判断其是否以元音字母开头并且以元音字母结尾时间复杂度O(ne)n是数组的长度e是枚举表的长度空间复杂度O(e)e是枚举表的长度 ⌨️算法代码1
#include vector
#include string
#include cctype // 为了使用 tolower() using namespace std; class Solution {
public: int vowelStrings(vectorstring words, int left, int right) { int count 0; // 遍历指定范围内的字符串 for (int i left; i right; i) { string word words[i]; // 判断字符串是否以元音字母开头和结尾 if (!word.empty()) { char firstChar tolower(word[0]); char lastChar tolower(word[word.size() - 1]); if ((firstChar a || firstChar e || firstChar i || firstChar o || firstChar u) (lastChar a || lastChar e || lastChar i || lastChar o || lastChar u)) { count; } } } return count; }
};
⌨️算法代码2
class Solution {
public: int vowelStrings(vectorstring words, int left, int right) { // 元音字母集合 vectorchar vowels {a, e, i, o, u}; int count 0; // 遍历指定范围内的字符串 for (int i left; i right; i) { string word words[i]; char first tolower(word[0]); // 转换为小写字母 char last tolower(word[word.size() - 1]); // 转换为小写字母 // 判断字符串是否以元音字母开头和结尾 if (find(vowels.begin(), vowels.end(), first) ! vowels.end() find(vowels.begin(), vowels.end(), last) ! vowels.end()) { count; } } return count; }
};
⌨️算法代码3
class Solution {
public:int vowelStrings(vectorstring words, int left, int right) {unordered_setchar vowels {a, e, i, o, u};int ans 0;for (int i left; i right; i) {const string word words[i];if (vowels.count(word[0]) vowels.count(word.back())) {ans;}}return ans;}
}; 作者力扣官方题解链接https://leetcode.cn/problems/count-the-number-of-vowel-strings-in-range/solutions/2515213/tong-ji-fan-wei-nei-de-yuan-yin-zi-fu-ch-dau9/ 备注算法代码1、2、3在思路上非常相似只是语法的细节有些不同以下详细解释。 代码解释
1遍历指定范围的字符串 以示例2为例words [hey,aeo,mu,ooo,artro], left 1, right 4 for (int i left; i right; i) 这句可以将 i 指向 aeo并通过循环遍历aeo,mu,ooo,artrostring word words[i]; 创建一个对words数组中索引为iwords[i]的字符串的引用string并将其命名为word如果是第1轮循环word中的内容为aeo 2判断字符串的长度 算法1、算法2 使用word.size()或者word.length()注意实际遍历时以0开头因此最后1位的数组下标为word.size()-1或者word.length()-1tolower()执行字符串转小写的功能感兴趣详见当然如果输入都是小写的话去掉这一步也问题不大 char firstChar tolower(word[0]);
char lastChar tolower(word[word.size() - 1]); 算法3 使用word.back()直接读取最后一位字符此处的word[0]也可写作word(word.front())直接读取第1位字符相对地.begin().end()则用于遍历字符串的开始与截止之前的题目介绍过相关用法字符串大写转小写C代码入门03 字符串-CSDN博客 vowels.count(word[0]) vowels.count(word.back()) 3判断字符串以元音开头 算法1||逻辑或、逻辑与 if ((firstChar a || firstChar e || firstChar i || firstChar o || firstChar u) (lastChar a || lastChar e || lastChar i || lastChar o || lastChar u)) 这一步通过逻辑与逻辑或的运算暴力枚举 算法2vector vectorchar vowels {a, e, i, o, u}; 这一步定义容器vowelsif (find(vowels.begin(), vowels.end(), first) ! vowels.end() find(vowels.begin(), vowels.end(), last) ! vowels.end()) 这一步暴力遍历字符串查询是否与容器vowels内的元音字母匹配算法3unordered_set unordered_setchar vowels {a, e, i, o, u}; 这一步定义无序集合vowels它内部使用哈希表hash table来实现因此它的查找、插入和删除操作的平均时间复杂度通常为 O(1)数据结构02附录02哈希表[C]-CSDN博客if (vowels.count(word[0]) vowels.count(word.back()))表示可以在哈希表vowels中查询到元音字母。 结语
博文到此结束写得模糊或者有误之处欢迎小伙伴留言讨论与批评督促博主优化内容{例如有错误、难理解、不简洁、缺功能}等博主会顶锅前来修改~~️️
我是梅头脑本片博文若有帮助欢迎小伙伴动动可爱的小手默默给个赞支持一下感谢点赞小伙伴对于博主的支持~~
同系列的博文数据结构_梅头脑_的博客-CSDN博客
同博主的博文随笔03 笔记整理-CSDN博客