Leetcode 刷题 - 双指针3(day3)_反转字符串中的元音字符

3. 反转字符串中的元音字符
345. Reverse Vowels of a String (Easy)

Leetcode / 力扣

Given s = “leetcode”, return “leotcede”.
在这里插入图片描述

使用双指针,一个指针从头向尾遍历,一个指针从尾到头遍历,当两个指针都遍历到元音字符时,交换这两个元音字符。

为了快速判断一个字符是不是元音字符,我们将全部元音字符添加到集合 HashSet 中,从而以 O(1) 的时间复杂度进行该操作。

时间复杂度为 O(N):只需要遍历所有元素一次
空间复杂度 O(1):只需要使用两个额外变量

代码展示:
import java.util.Arrays;
import java.util.HashSet;

/**
 * 3. 反转字符串中的元音字符
 * 使用双指针进行快速遍历数组,一个指针从头开始遍历,一个指针从尾部开始遍历
 * 使用hashset 将元音字母保存在集合中,实现快速比对
 */
public class DoublePointer3_reverseVowels {

    public static void main(String[] args) {
        // hashset 元音字母集合 
        HashSet vowels = new HashSet(Arrays.asList('a','o','e','i','u','A','O','E','I','U'));
        
        String str = "leetcode";
        if (str == null) return;
        
        int i =0, j = str.length()-1;
        //新集合,将调换后的str字符串存储在新的字符串中,
        // 也可以进行临时参数调换,则不需要建立新字符串数组
        char[] result = new char[str.length()];
        while (i<=j){
            char  ci = str.charAt(i);
            char  cj = str.charAt(j);
            //i++,先执行操作,在执行i=i+1,
            if (!vowels.contains(ci)){
                result[i++] = ci;
            } else if(!vowels.contains(cj)){
                result[j--] = cj;
            } else {
                result[i++] = cj;
                result[j--] = ci;
            }
        }
        System.out.println(result);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Janson666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值