zoukankan      html  css  js  c++  java
  • 算法--------数组------反转字符串中的元音字母

    编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
    
    示例 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

  • 相关阅读:
    mysql优化——语句优化小技巧
    mysql优化——索引与索引优化
    Mysql存储引擎
    Mysql优化技术
    数据库设计——三范式
    java多线程(二)——用到的设计模式
    java多线程(一)
    ubuntu下如何查看用户登录及用户操作相关信息
    hdu 2546
    hdu 2955
  • 原文地址:https://www.cnblogs.com/caoxinyu/p/10568510.html
Copyright © 2011-2022 走看看