Java编程题目-8:元音字母调换位置

这是LeetCode上的一道编程题,题目是给出个英文单词(字符串,含有大小写),将其中的元音字母调换位置。题目链接:Reverse Vowels of a String
下面来看实现的代码:

 public static String reverseVowels(String s) {
            char[] cArr = s.toCharArray();
            StringBuilder sb = new StringBuilder();
            int len = cArr.length;
            char temp = ' ';

            ArrayList<Character> vowelList = new ArrayList<Character>();
            vowelList.add('a');
            vowelList.add('e');
            vowelList.add('i');
            vowelList.add('o');
            vowelList.add('A');
            vowelList.add('E');
            vowelList.add('I');
            vowelList.add('O');
            vowelList.add('U');

            boolean flag = false;
            int begin = 0;
            int end = len-1;
            while(begin<=end){
                flag = false;
                if(vowelList.contains(cArr[begin])){
                    flag = true;
                    temp = cArr[begin];
                }else{
                    begin++;
                }
                if(vowelList.contains(cArr[end]) &&  flag == true){
                    cArr[begin] = cArr[end];
                    cArr[end] = temp;
                    begin++;
                    end--;
                }else if(vowelList.contains(cArr[end])){

                    continue;
                }else{
                    end--;
                }
            }

            for (Character character : cArr) {
                sb.append(character);
            }
            return sb.toString();
        }

在这段代码当中,有以下几点值得考虑:

  1. 因为题目当中只是说明了元音字母,我们很容易忽略了大,小写这两种情况;
  2. 实际上,这道题目的思考方式类似于之前的数组奇偶数分离,只是这道题需要考虑的更加具体;
  3. 使用StringBuilder进行字符的拼接,并作为最终的返回值将其返回。

    这其中,begin从字符数组的头开始遍历,end从字符数组的尾开始遍历。begin找到一个元音字符就在该index等待,没找到就进行index+1操作;end找到一个元音字符,并且此时的begin也找到了元音字符(flag为true的时候),进行位置交换,否则只是end找到了元音字符则跳过这次循环,如果end也没找到元音字符,那么则end进行+1操作。

我觉得这是比较笨的实现方式,应该有更加巧妙的方式来实现这道题。这个方法的时间复杂度为O(n),空间复杂度为S(1)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值