这题真的没啥技术含量,头尾指针往中间扫,遇到元音字符就交换就好了。。直接给代码
public String reverseVowels(String s) {
int head = 0, tail = s.length() - 1;
HashSet<Character> vowels = new HashSet<>();
char[] chArr = s.toCharArray();
vowels.add('a');
vowels.add('e');
vowels.add('i');
vowels.add('o');
vowels.add('u');
vowels.add('A');
vowels.add('E');
vowels.add('I');
vowels.add('O');
vowels.add('U');
while (head < tail) {
char headCh = chArr[head];
char tailCh = chArr[tail];
boolean isHeadVow = vowels.contains(headCh);
boolean isTailVow = vowels.contains(tailCh);
if (isHeadVow == isTailVow) {
if (isHeadVow) {
char tmp = chArr[head];
chArr[head] = chArr[tail];
chArr[tail] = tmp;
}
head++;
tail--;
} else if (isHeadVow) {
tail--;
} else {
head++;
}
}
return new String(chArr);
}