Leetcode 2062. 统计字符串中的元音子字符串

一、题目描述

子字符串 是字符串中的一个连续(非空)的字符序列。
元音子字符串 是 仅 由元音('a'、'e'、'i'、'o' 和 'u')组成的一个子字符串,且必须包含 全部五种 元音。
给你一个字符串 word,统计并返回 word中 元音子字符串的数目 。
输入:word = “aeiouu”
输出:2
解释:下面列出 word 中的元音子字符串(加粗部分):
aeiouu”
aeiouu

来源:2062. 统计字符串中的元音子字符串

二、解题报告

1、思路分析

  (1)用二进制将五个元音字母和其他字母一一对应起来。

a e i o u 其他
00001 00010 00100 01000 10000 100000

  (2)利用位或运算,当==mymask=11111==时,即全都包含。
  (3)当子字符串中含有其他字母时,进行100000与==mymask==进行位与运算,会得到非零数,此时重新遍历,例:
若==mymask=010110 & 100000=000000==;
若==mymask=101010 & 100000=100000==;
  (4)若==mymask=011111==,则子串成立,ans增加。

2、代码详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#define mask ((1<<5)-1)
int getchmask(char c){
char a[]={"aeiou"};
for(int i=0;i<5;i++){
if(a[i]==c) return (1<<i);
}
return (1<<5);
}
int countVowelSubstrings(char * word){
int ans=0;
int mymask;
for(int i=0;word[i];++i){
mymask=0;
for(int j=i;word[j];j++){
mymask|=getchmask(word[j]);
if(mymask & (1<<5))
break;
if((mymask)==(mask))
ans++;
}
}
return ans;
}

借鉴:英雄哪里出来

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2024 lucky_dog
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信