zoukankan      html  css  js  c++  java
  • LeetCode#345-Reverse Vowels of a String-反转字符串中的元音字母

    一、题目

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

    示例 1:

    输入: "hello"
    输出: "holle"
    

    示例 2:

    输入: "leetcode"
    输出: "leotcede"
    

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

    二、题解

    英语中的元音字母有 a, e, i, o, u 五个,考虑大小写的话,加上 A, E, I, O, U,遇到这些元音字母,需要反转元音字母,但其它辅音字母的位置不变。

    这道题其实和 #344 题很像,用双指针法。遍历数组,一个指针从前向后扫描,一个指针从后向前扫描,当前后都扫描出元音,就交换两个元音。直到左指针大于等于右指针,就结束。

    时间复杂度:O(N),空间复杂度:O(1)。

    function reverseVowels($s) {
        // 如果字符串为空,或只有一个字符,就没必要反转了
        if (strlen($s) <= 1) {
            return $s;
        }
    
        $vowelMap = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'];
        
        $len = strlen($s);
        $left = 0;
        $right = $len - 1;
        while ($left < $right) {
            // 从左判断当前元素是不是元音,若不是,则 left 指针右移
            while (!in_array($s[$left], $vowelMap) && $left < $len) {
                $left++;
            }
            
            // 从右判断当前元素是不是元音,若不是,则 right 指针左移
            while (!in_array($s[$right], $vowelMap) && $right >= 0) {
                $right--;
            }
            
            // 如果没有元音
            if ($left >= $right) {
                break;
            }
    
            // 交换前后元音
            // 如果前后元音相等,不需要交换了,直接移动左右指针
            if ($s[$left] != $s[$right]) {
                $temp = $s[$left];
                $s[$left] = $s[$right];
                $s[$right] = $temp;
            }
    
            $left++;
            $right--;
        }
        return $s;
    }
    
  • 相关阅读:
    RabbitMq使用说明
    php使用rabbitmq需安装amqp拓展协议
    新建springboot web项目pom报错
    HttpRunner Manager 接口自动化平台搭建
    数据库存储过程进行批量插入数据
    Windows系统下Robot Framework的安装
    利用Charles模拟客户端弱网环境进行弱网测试
    JMeter进行简单的接口压测
    JMeter的安装和使用
    grep, sed 和 awk 学习总结
  • 原文地址:https://www.cnblogs.com/sunshineliulu/p/12629164.html
Copyright © 2011-2022 走看看