leetcode:(345) Reverse Vowels of a String(java)
阿新 • • 發佈:2018-11-06
題目:
Write a function that takes a string as input and reverse only the vowels of a string.
Example 1:
Input: "hello"
Output: "holle"
Example 2:
Input: "leetcode"
Output: "leotcede"
解題思路:
使用雙指標指向待反轉的字元,一個指標從頭向尾遍歷,另外一個指標從尾向頭遍歷。當兩個指標指向的字元都是母音字元時,交換兩個指標所指的字元。若其中只有一個指標指向的字元是母音字元時,將相應指標加1/減1,另外指標不變。程式碼如下:
package Leetcode_Github; import java.util.Arrays; import java.util.HashSet; public class TwoPoints_ReverseVowels_345_1101 { public String ReverseVowels(String s){ //判空 if (s == null || s.length() == 0) { return s; } //存放返回結果 char[] result = new char[s.length()]; //將母音字母存入set中 HashSet<Character> vowels = new HashSet<>(Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U')); int i = 0; int j = s.length()-1; while (i <= j) { char ci = s.charAt(i); char cj = s.charAt(j); if (!vowels.contains(ci)) { result[i++] = ci; //ci不是母音字母,i++ } else if (!vowels.contains(cj)) { result[j--] = cj; //cj不是母音字母,j-- } else { //ci 和cj都是母音字母,進行交換 result[i++] = cj; result[j--] = ci; } } return new String(result); //將陣列轉換成字串返回 } }