Leetcode345. 反转字符串中的元音字母
题目:
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
(此题和leetcode344类似,方法一致)
示例 1:
输入: "hello"
输出: "holle"
题解:
双指针法
java代码:
public static String reverseVowels(String s) {
int left = 0;
int right = s.length() - 1;
char[] chars = s.toCharArray();
while (left < right) {
if (!isVowel(chars[left])) {
left++;
}
if (!isVowel(chars[right])) {
right--;
}
if (isVowel(chars[left]) && isVowel(chars[right])) {
char tmp = chars[left];
chars[left] = chars[right];
chars[right] = tmp;
left++;
right--;
}
}
return new String(chars);
}
public static boolean isVowel(char c) {
return "aeiouAEIOU".indexOf(c) >= 0;
}
scala代码如下:
/**
* 双指针法
*
* @param s
* @return
*/
def reverseVowels(s: String): String = {
val list = new util.ArrayList[Char]()
list.add('A')
list.add('a')
list.add('E')
list.add('e')
list.add('I')
list.add('i')
list.add('O')
list.add('o')
list.add('U')
list.add('u')
val array = s.toCharArray
var left = 0
var right = array.length - 1
while (left <= right) {
if (!list.contains(array(left))) {
left = left + 1
}
if (!list.contains(array(right))) {
right = right - 1
}
if (list.contains(array(left)) && list.contains(array(right))) {
val temp = array(left)
array(left) = array(right)
array(right) = temp
left = left + 1
right = right - 1
}
}
array.toBuffer.toString()
}