算法--------数组------反转字符串中的元音字母

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

示例 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

原文地址:https://www.cnblogs.com/caoxinyu/p/10568510.html