题目:给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现不止一次。
解题思路:双指针,快排思想的变种
分别定义头尾两个指针,遍历一次字符串,如果头尾都为元音字符,则交换位置,否则向中间靠拢,直到遍历完成。
代码:
class Solution {
public String reverseVowels(String s) {
char[] s1 = s.toCharArray(); // 新字符数组
int n = s.length();
int l = 0, r = n-1; // 头尾指针
while(l < r){
if(isYY(s1[l]) && isYY(s1[r])){
swap(s1, l, r); // 交换
l++;
r--;
} else{
if(!isYY(s1[l])) l++;
if(!isYY(s1[r])) r--;
}
}
return String.valueOf(s1);
}
// 判断字符是否是元音字母
private boolean isYY(char c){
String yy = "aeiou";
return yy.indexOf(Character.toLowerCase(c)) != -1;
}
// 交换
private void swap(char[] s1, int l, int r){
char c = s1[l];
s1[l] = s1[r];
s1[r] = c;
}
}