LC.345 反转字符串中的元音字母

本文介绍了如何使用双指针技巧在Java中反转字符串中的元音字母,通过HashSet存储并检查元音,避免直接修改字符串。通过字符数组操作实现字符交换,提供了一个完整的解决方案。

题目链接

点击这里进入题目

解题思路

采用双指针中的两端指针的思想,有几个点要考虑:

  • 元音字母不仅包含小写字母,要考虑到。使用HashSet进行元音字母的存储,使用contains进行存在性比较。
  • 进行字符类型的调换时,不能使用charAt()这个函数只是用来展示用的,由于String类型的不可修改性。要进行位置调换,只能将字符串转换为字符数组或使用StringBuilder进行操作。
    思路:两端指针,其中有一端指向的不是元音字符,则对向的指针向自己移动,如果两指针均指向元音字母,则进行调换,最后将字符数组转换为String类型进行输出。

代码

class Solution {

    HashSet<Character> yuanyin= new HashSet<>(){
        {//创建set集合,用来存储元音字符,方便后面contains使用
            add('a');
            add('e');
            add('i');
            add('o');
            add('u');
            add('A');
            add('E');
            add('I');
            add('O');
            add('U');
        }
    };

    public String reverseVowels(String s) {
        int left=0;
        int right=s.length()-1;
        char[] a=s.toCharArray();
        while(left<right){
            if(yuanyin.contains(a[left])&&yuanyin.contains(a[right])){
                char tmp;
                tmp=a[left];
                //这里不能使用charAt(),因为String是不可修改的类型,所以不能直接对其进行修改
                a[left]=a[right];
                a[right]=tmp; 
                left++;
                right--;

            }
            else if(yuanyin.contains(s.charAt(left)))
                right--;
                else 
                    left++;    
        }
            return new String(a);
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值