題目:
編寫一個函數,以字元串作為輸入,反轉該字元串中的元音字母。
示例 1:
輸入: "hello"
輸出: "holle"
示例 2:
輸入: "leetcode"
輸出: "leotcede"
說明:
元音字母不包含字母"y"。
思路:可先将所有的元音字母(包括大小寫放入HashSet容器中),在準備一個額外字元數組。
- 各取字元串中的第一個字元和最後一個字元,如果容器裡面原來沒有,各自添加到輔助數組,各自的指針向前或向後走一步
- 若發現都在容器裡面,同時放入輔助數組,但這時要交換位置,各自指針移動
這張動圖停不錯的,位址:https://leetcode-cn.com/problems/reverse-vowels-of-a-string/solution/shuang-zhi-zhen-onshi-jian-fu-za-du-by-cyc2018/
private final static HashSet<Character> set=new HashSet<Character>(Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'));
public String reverseVowels(String s) {
//先準備一個容器,裝入所有的元音字母
int i=0,j=s.length()-1;
//準備一個額外的數組
char chs[]=new char[s.length()];
while(i<=j){
char ci=s.charAt(i);
char cj=s.charAt(j);
if(!set.contains(ci)){
chs[i++]=ci;
}else if(!set.contains(cj)){
chs[j--]=cj;
}else{
chs[i++]=cj;
chs[j--]=ci;
}
}
return String.valueOf(chs);
}