345. 反转字符串中的元音字母

345. 反转字符串中的元音字母

leetcode 345. 反转字符串中的元音字母


题目:345. 反转字符串中的元音字母

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

示例1:

输入: “hello”
输出: “holle”

示例2:

输入: “leetcode”
输出: “leotcede”

说明:
元音字母不包含字母”y”。

方法:双指针 (对撞指针)

思路:双指针(对撞指针) ,一个从头向尾遍历,一个指针从尾向头遍历,找到一对元音字母交换一次

运行数据:执行用时:2 ms,内存消耗:39.8 MB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// LeetCode指定调用方法
public String reverseVowels(String s) {

// 如果字符串长度小于2,无需反转字符串中的元音字母 ,直接原样返回
if (s.length() < 2) {
return s;
}

// 将字符串转换成字符数组
char schar[] = s.toCharArray();

// i标识头指针位置,j标识尾指针位置
int i = 0, j = schar.length - 1;


// flagI标识头端是否找到元音字母,flagJ标识尾端是否找到元音字母,
boolean flagI = false, flagJ = false;

// 反正字符串中的元音字母
while (i < j) {

// 判断是否找到了头端的元音字母
if (!flagI) {
if (isVowel(schar[i])) {
flagI = true;
} else {
i++;
}

}

// 判断是否找到了尾端的元音字母
if (!flagJ) {
if (isVowel(schar[j])) {
flagJ = true;
} else {
j--;
}

}

// 判断是否两端都找到了元音字母,都找到了将交换元音字母
if (flagI && flagJ) {
char temp = schar[i];
schar[i] = schar[j];
schar[j] = temp;
i++;
j--;
flagI = false;
flagJ = false;
}
}

return new String(schar);
}

// 判断字符是否为元音字母
public boolean isVowel(char ch) {
return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u'
||ch=='A'|| ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U';
}

相关链接:

学习所得,资料、图片部分来源于网络,如有侵权,请联系本人删除。

才疏学浅,若有错误或不当之处,可批评指正,还请见谅!


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×