编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
示例 1:
输入: "hello"
输出: "holle"
示例 2:
输入: "leetcode"
输出: "leotcede"
说明:
元音字母不包含字母"y"。
我的解答:
class Solution {
public String reverseVowels(String s) {
if (s == null || s.length()==0) {
return s;
}
char[] chars = s.toCharArray();
int length = chars.length;
char temp;
for (int i = 0 , j = length -1 ; j > i ;){
if (!(chars[i] == 'a' || chars[i] == 'e' ||chars[i] == 'i' ||chars[i] == 'o' ||chars[i] == 'u'||chars[i] == 'A' || chars[i] == 'E' ||chars[i] == 'I' ||chars[i] == 'O' ||chars[i] == 'U')) {
i++;
continue;
}
if (!(chars[j] == 'a' || chars[j] == 'e' ||chars[j] == 'i' ||chars[j] == 'o' ||chars[j] == 'u'|| chars[j] == 'A' || chars[j] == 'E' ||chars[j] == 'I' ||chars[j] == 'O' ||chars[j] == 'U')) {
j--;
continue;
}
temp = chars[i];
chars[i] = chars[j];
chars[j] = temp;
i ++ ;
j -- ;
}
return String.valueOf(chars);
}
}
网上有意思的解决方法:
class Solution {
public String reverseVowels(String s) {
boolean[] flags = new boolean[126];
flags['a'] = true;
flags['e'] = true;
flags['i'] = true;
flags['o'] = true;
flags['u'] = true;
flags['A'] = true;
flags['E'] = true;
flags['I'] = true;
flags['O'] = true;
flags['U'] = true;
char[] arr = s.toCharArray();
int left = 0, right = arr.length - 1;
while (left < right) {
if (!flags[arr[left]]) {
left++;
continue;
}
if (!flags[arr[right]]) {
right--;
continue;
}
swap(arr, left, right);
left++;
right--;
}
return String.valueOf(arr);
}
private void swap(char[] arr, int i, int j) {
char tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
总结:
1.学到了分辨字符还可以直接用这种方式,用一个boolean 数组,‘a’ 如果是true 的话,那么就bool[‘a’] = true;
‘a’ 可不是一个字符,而是一个数字。所以,数组的长度不是这里的十个,而是’u’ 的 数值。额,我错了,不是‘u’.
是‘z’ 不然会Line 18: java.lang.ArrayIndexOutOfBoundsException: 119