345:翻转字符串中的元音字母

问题描述

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

示例

输入: "hello"
输出: "holle"
输入: "leetcode"
输出: "leotcede"

说明:
元音字母不包含字母"y"。

思路

双指针法。指针分别指向开头第一个未交换的元音字母和末尾第一个未交换的元音字母。 然后交换。 这题为了高效率可以写很长的判定,懒得写了。思路都是一样的。只是一个用了HashSet, 一个就是写在if里了。

解决方案

class Solution {
    public String reverseVowels(String s) {
        Set<Character> set = new HashSet<>();
        char[] chars = s.toCharArray();
        set.add('a');set.add('e');set.add('i');set.add('o');set.add('u');
        int left = 0, right = s.length()-1;
        char tmp;
        while(left < right){
            if(!set.contains(chars[left])){
                left++;
                continue;
            }
            if(!set.contains(chars[right])){
                right--;
                continue;
            }
            tmp = chars[left];
            chars[left] = chars[right];
            chars[right] = tmp;
            left++;
            right--;
        }
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < chars.length; i++){
            sb.append(chars[i]);
        }
        return sb.toString();
    }
}

发布了396 篇原创文章 · 获赞 22 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41687289/article/details/104908552