leetcode#345-反转字符串中的元音字母

跳出“反转”,其实可以遍历字符串放入新的数组里面来实现反转;善用set来判断重复

题目描述

给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。

元音字母包括 ‘a’、’e’、’i’、’o’、’u’,且可能以大小写两种形式出现。

示例 1:

输入:s = “hello”
输出:”holle”
示例 2:

输入:s = “leetcode”
输出:”leotcede”

思路

看输出,可以看到前后的元音字母进行了位置交换,可以想到是同时操作两个字符来进行比较,所以用双指针会很方便;

关于反转:其实就是交换前后两个元音字母,是不是可以不交换?可以双向遍历,然后把元素放入一个新的字符数组,然后遇到两个都是元音字母的情况,放的位置变一下即可,就是该往前放的放后面,该往后放的放前面;

关于判断元音字母:可以把元音字母放到set里面,set里面判断是否存在时间复杂度为O(1),方便判断而且高效

代码

Java

public String reverseVowels(String s) {
        HashSet<Character> set = new HashSet<>(Arrays.asList(
                'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'));
        if (s == null) {
            return null;
        }
        int a = 0;
        int b = s.length() - 1;
        char[] res = new char[b+1];
        while (a <= b) {
            char ca = s.charAt(a);
            char cb = s.charAt(b);
            if (!set.contains(ca)) {
                res[a++] = ca;
            } else if (!set.contains(cb)) {
                res[b--] = cb;
            } else {
                res[a++] = cb;
                res[b--] = ca;
            }
        }
        return new String(res);
    }

leetcode#345-反转字符串中的元音字母
https://www.powercheng.fun/articles/206d66e4/
作者
powercheng
发布于
2021年12月21日
许可协议