345. Reverse Vowels of a String
双指针,冗长的 Java 代码。。
class Solution {
public String reverseVowels(String s) {
if (s == null || s.length() <= 1) {
return s;
}
List<Character> vowels = new ArrayList<>();
vowels.add('a');
vowels.add('e');
vowels.add('i');
vowels.add('o');
vowels.add('u');
char[] sCharArray = s.toCharArray();
int left = 0;
int right = sCharArray.length - 1;
while (left < right) {
if (!vowels.contains(Character.toLowerCase(sCharArray[left]))) {
left ++;
} else if (!vowels.contains(Character.toLowerCase(sCharArray[right]))) {
right --;
} else {
swap(sCharArray, left, right);
left ++;
right --;
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < sCharArray.length; i++) {
sb.append(sCharArray[i]);
}
return sb.toString();
}
private char[] swap(char[] array, int a, int b) {
char temp = array[a];
array[a] = array[b];
array[b] = temp;
return array;
}
}
用 Python 写简单多了。
class Solution:
def reverseVowels(self, s):
"""
:type s: str
:rtype: str
"""
if not s or len(s) == 0:
return s
vowels = ['a', 'e', 'i', 'o', 'u']
str_list = list(s)
l, r = 0, len(s) - 1
while l < r:
if str_list[l].lower() not in vowels:
l += 1
elif str_list[r].lower() not in vowels:
r -= 1
else:
str_list[l], str_list[r] = str_list[r], str_list[l]
l += 1
r -= 1
return "".join(str_list)