本题需要用几个不太熟悉的方法,首先需要创建一个boolean[]数组盛放元音字母,由于原题并没有说字符串里只有字母,防止boolean数组中的数小于0,因此需要用元音字母减去Ascii码的最小值 ‘ ’ 空字符。并赋值true。在主方法中用双指针分别指向两边判断是否是元音字母,若是则交换字母,指针向中间移动。要注意原题是String类型,需要转换成char类型,用toArray函数,最后需要转换成String,用String.valueOf()函数。
class Solution {
static char[] vowels = new char[] {'a','e','i','o','u'};
static boolean[] hash = new boolean[128];
static {
for (char c : vowels) {
hash[c - ' '] = hash[Character.toUpperCase(c) - ' '] = true;
}
}
public String reverseVowels(String s) {
char[] cs = s.toCharArray();
int left = 0;
int right = s.length() - 1;
while (left < right) {
if (hash[cs[left] - ' '] && hash[cs[right] - ' ']) {
swap(cs, left++, right--);
}else {
if (!hash[cs[left] - ' ']) left++;
if (!hash[cs[right] - ' ']) right--;
}
}
return String.valueOf(cs);
}
private void swap(char[] cs, int l, int r) {
char temp = cs[l];
cs[l] = cs[r];
cs[r] = temp;
}
}