LeetCode——345. 反转字符串中的元音字母(Java)

题目描述

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

示例 1:
输入:"hello"
输出:"holle"

示例 2:
输入:"leetcode"
输出:"leotcede"

题解思路

返回反转元音字母后的字符串,小学生也知道元音字母有 ‘aeiou’这五个,这里注意大小写就好

一般看到反转又是字符串的情况,果断双指针,绝对是效率很高的方法

正确代码

    public String reverseVowels(String s) {
        int left = 0, length = s.length(), right = length - 1;
        char[] arr = s.toCharArray();

        while (left < right) {
            while (left < length && !isVowel(arr[left])) {
                left++;
            }
            while (right >0 && !isVowel(arr[right])) {
                right--;
            }
            if (left < right) {
                swap(arr, left, right);
                left++;
                right--;
            }
        }
        return new String(arr);
    }

    private boolean isVowel(char ch) {
        return "aeiouAEIOU".indexOf(ch) >= 0;
    }

    private void swap(char[] arr, int i, int j) {
        char temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

总结

一看到反转,不申请额外空间的情况下,数组结构采用双指针,链表结构头插法都可以解决

并且效率都在保证在O(n)的时间复杂度,如果申请额外空间思路就更多了,大家可以思考一下

如果文章存在问题或者有更好的题解,欢迎在评论区斧正和评论,各自努力,你我最高处见
posted @ 2021-08-19 08:36  21岁还不是架构师  阅读(108)  评论(0编辑  收藏  举报