【LeetCode每日一题】LeetCode 345.反转字符串中的元音字母

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

题目描述

给定一个字符串 s,你需要反转字符串中所有的元音字母,并返回新的字符串。

元音字母是 a, e, i, o, u,这些字母的大小写都会被考虑。

示例 1 :

输入: s = "hello"

输出: "holle"

示例 2 :

输入: s = "leetcode"

输出: "leotcede"

Java 实现代码

java 复制代码
class Solution {
    public String reverseVowels(String s) {
        // 用一个字符数组来保存字符串,便于修改
        char[] arr = s.toCharArray();
        // 设置左右指针
        int left = 0, right = arr.length - 1;
        
        // 使用双指针反转元音字母
        while (left < right) {
            // 找到左边的元音字母
            while (left < right && !isVowel(arr[left])) {
                left++;
            }
            // 找到右边的元音字母
            while (left < right && !isVowel(arr[right])) {
                right--;
            }
            // 交换元音字母
            char temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            left++;
            right--;
        }
        
        // 返回新的字符串
        return new String(arr);
    }
    // 判断字符是否为元音字母
    private boolean isVowel(char c) {
        return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'A' || c == 'E' || c == 'I' || c == 'O'
                || c == 'U';
    }
}

解题思路

  1. 双指针法 : 使用两个指针 leftright 分别指向字符串的两端。左指针向右移动,右指针向左移动,直到它们相遇。
  2. 判断元音字母 : 定义一个辅助方法 isVowel() 来判断一个字符是否是元音字母。可以通过字符比较的方式判断是否属于 a, e, i, o, u 或其大写形式。
  3. 交换元音字母: 每当找到左右指针指向的字符都是元音字母时,交换这两个字符。
  4. 跳过非元音字母: 如果某个指针指向的字符不是元音字母,则该指针继续向中间移动,直到找到下一个元音字母。
  5. 终止条件: 当左指针和右指针相遇或交错时,停止交换。

时间复杂度分析

  • 时间复杂度: O(n),其中 n 是字符串的长度。我们遍历字符串一次,每次操作的时间是常数时间。
  • 空间复杂度: O(n),我们将字符串转换为字符数组进行操作。
相关推荐
fab 在逃TDPIE1 分钟前
Sentaurus TCAD 仿真教程(十)
算法
天赐学c语言20 分钟前
12.19 - 买卖股票的最佳时机 && const的作用
c++·算法·leecode
菜鸟233号23 分钟前
力扣78 子集 java实现
java·数据结构·算法·leetcode
yesyesyoucan26 分钟前
在线魔方解谜站:从零入门到精通的智能魔方学习平台
学习·算法
Han.miracle27 分钟前
数据结构与算法--008四数之和 与经典子数组 / 子串问题解析
数据结构·算法
!停28 分钟前
字符函数和字符串函数
算法
AI科技星44 分钟前
圆柱螺旋运动方程的一步步求导与实验数据验证
开发语言·数据结构·经验分享·线性代数·算法·数学建模
FONE_Platform1 小时前
FONE食品饮料行业全面预算解决方案:构建韧性增长
人工智能·算法·全面预算·全面预算管理系统·企业全面预算
月明长歌1 小时前
【码道初阶】【Leetcode94&144&145】二叉树的前中后序遍历(非递归版):显式调用栈的优雅实现
java·数据结构·windows·算法·leetcode·二叉树
DanyHope1 小时前
《LeetCode 49. 字母异位词分组:哈希表 + 排序 全解析》
算法·leetcode·哈希算法·散列表