编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入: "hello" 输出: "holle"
示例 2:
输入: "leetcode" 输出: "leotcede"
说明:
元音字母不包含字母"y"。
将字符串转为字符数组(或列表),定义双指针 p、q,分别指向数组(列表)头部和尾部,当 p、q 指向的字符均为元音字母时,进行交换。
依次遍历,当 p >= q
时,遍历结束。将字符数组(列表)转为字符串返回即可。
class Solution:
def reverseVowels(self, s: str) -> str:
if s is None:
return s
chars = list(s)
p, q = 0, len(chars) - 1
while p < q:
if chars[p] not in 'aeiouAEIOU':
p += 1
continue
if chars[q] not in 'aeiouAEIOU':
q -= 1
continue
chars[p], chars[q] = chars[q], chars[p]
p += 1
q -= 1
return ''.join(chars)
class Solution {
public String reverseVowels(String s) {
if (s == null) {
return s;
}
char[] chars = s.toCharArray();
int p = 0, q = chars.length - 1;
while (p < q) {
if (!isVowel(chars[p])) {
++p;
continue;
}
if (!isVowel(chars[q])) {
--q;
continue;
}
swap(chars, p++, q--);
}
return String.valueOf(chars);
}
private void swap(char[] chars, int i, int j) {
char t = chars[i];
chars[i] = chars[j];
chars[j] = t;
}
private boolean isVowel(char c) {
switch(c) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'A':
case 'E':
case 'I':
case 'O':
case 'U':
return true;
default:
return false;
}
}
}