元音字母


给定一个只包含大写字母 AZ 的字符串,找到相邻两个元音字母之间间隔最大的距离。注:元音字母为 AEIOU

思路:记录上一个元音字母的位置last,以及当前访问的元音字母的位置i,计算最大距离判断是否更新ans的结果。如此循环

题解1

逻辑有些混乱

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
bool check(char c) {
if (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') return true;
return false;
}

int func(string str) {
int index[2];
int maxlen = 0;
int flag = 0;
for (int i = 0; i < str.length(); ++i) {
if (flag && check(str[i])) {
index[1] = i;
int newlen = index[1] - index[0];
if (newlen > maxlen) maxlen = newlen;
index[0] = index[1];
}
if (!flag && check(str[i])) {//第1个元音字母
index[0] = i;
flag = 1;
}
}
return maxlen;
}

题解2

对首个元音字母的处理 进行逻辑优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bool check(char c) {
if (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') return true;
return false;
}

int func(string str) {
int last = -1;
int maxlen = 0;
for (int i = 0; i < str.length(); ++i) {
if (check(str[i])) {
if (last == -1) last = i;
else {
maxlen = max(maxlen, i - last);
last = i;
}
}
}
return maxlen;
}

题解3

优化部分细节 集成check函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int func(string str) {
int ans = 0;
int last = -1;
for (int i = 0; str[i]; ++i) {
if (str[i] == 'A' || str[i] == 'E' || str[i] == 'I' || str[i] == 'O' || str[i] == 'U') {
if (last == -1) last = i;
else {
ans = max(ans, i - last);
last = i;
}
}
}
return ans;
}