是常规双指针解法,难点在于如何记录left-right 是满足aeiou 顺序的, 这里采用引入pre 指针,表示 right 指针 的前 一个不同的 字母,表示aeiou , 已经满足的元音字母
class Solution {
public:
int longestBeautifulSubstring(string word) {
int left =0 ;//
for(left=0;left<=word.size();left++){
if(word[left]=='a') break;
}
int res=0;
int right=0;
while(left<word.size()){
// left 指向'a'
while(left<word.size()){
if(word[left]=='a') break;
left++;
}
// 开始遍历右指针
right=left+1;
char pre= word[left];
while(right<word.size()){
if( word[right]== word[right-1] )
right++;
else if(word[right]=='e' && pre=='a'){
pre ='e';
right++;
}
else if(word[right]=='i' && pre=='e'){
pre ='i';
right++;
}
else if(word[right] == 'o' && pre=='i'){
pre='o';
right++;
}
else if(word[right] =='u' && pre=='o'){
pre ='o'; right++;
}
else {
break;
}
}
//退出循环时,说明left-right-1 有可能是美丽数(有可能没有aeiou 全部出现, 要确保right-1 是u,才能是美丽数), 但到right 就不是了
if(word[right-1]=='u')
res=max(res,right-left);
left=right;
}
return res;
}
};