編寫一個函數,以字元串作為輸入,反轉該字元串中的元音字母。
示例 1:
輸入:“hello”
輸出:“holle”
示例 2:
輸入:“leetcode”
輸出:“leotcede”
提示:
元音字母不包含字母 “y” 。
題解:
使用雙指針,一個從前開始 指,一個從後開始指,遇到元音就交換
這裡的注意點有兩點:
1.Java中的String是不可變的,是以需要建立一個 StringBuffer
2.判斷一個字元是不是元音字母,不要編寫一個函數,放在一個set中,可以以O(1)時間去讀取!
class Solution {
public String reverseVowels(String s) {
//java中String是不可變的
StringBuffer sb = new StringBuffer(s);
int i = 0;
int j = sb.length() - 1;
while(i < j){
//都是元音字母 進行交換
if(voews.contains(sb.charAt(i)) && voews.contains(sb.charAt(j))){
char temp = sb.charAt(i);
sb.setCharAt(i,sb.charAt(j));
sb.setCharAt(j,temp);
//交換完成之後 雙指針 也需要移動!!!
i++;
j--;
}else if(voews.contains(sb.charAt(i))){
//如果i是元音字母 則 j--
j--;
}else if(voews.contains(sb.charAt(j))){
//如果j是元音字母 但i不是
i++;
}else{
i++;
j--;
}
}
return sb.toString();
}
//判斷是否是原因字母
private static final Set<Character> voews = new HashSet<>(Arrays.asList('a','e','i','o','u','A','E','I','O','U'));
}