题目链接
法一(双指针)
private static boolean isVowel(char c){
char a = Character.toLowerCase(c);
if(a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u'){
return true;
}
return false;
}
public String reverseVowels(String s) {
int left = 0, right = s.length() - 1;
char[] str = s.toCharArray();
while(left < right){
if(isVowel(str[left]) && isVowel(str[right])){
str[left] ^= str[right];
str[right] ^= str[left];
str[left] ^= str[right];
}else if(isVowel(str[left])){
right--;
continue;
}else if(isVowel(str[right])){
left++;
continue;
}
left++;
right--;
}
return new String(str);
}
法二(栈)
private static boolean isVowel_2(char c){
String vowel = "aeiouAEIOU";
return vowel.indexOf(c) >= 0;
}
public String reverseVowels_2(String s) {
int len = s.length();
Deque<Character> sk = new LinkedList<>();
char[] str = s.toCharArray();
for(int i = 0; i < len; i++){
if(isVowel_2(str[i])){
sk.push(str[i]);
}
}
for(int i = 0; i < len; i++){
if(isVowel_2(str[i])){
str[i] = sk.pop();
}
}
return new String(str);
}
本地测试
lay.showTitle(345);
Solution345 sol345 = new Solution345();
String s345 = "leetcode";
System.out.println(sol345.reverseVowels(s345));
System.out.println(sol345.reverseVowels_2(s345));