• 反转字符串中的元音字母


    题意:

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

    元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现不止一次。

    示例 1:

    输入:s = “hello”
    输出:“holle”

    示例 2:

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

    提示:

    • 1 <= s.length <= 3 * 10^5
    • s可打印的 ASCII 字符组成

    题目来源: https://leetcode.cn/problems/reverse-vowels-of-a-string/description/

    解题方法:

    方法一:将所有的元音字母提出来反转,反转之后再替换原对应索引的元素

    	//将所有的元音字母提出来反转,反转之后再替换原对应索引的元素(hello为例)
        function reverseVowels($s) {
        	$base_vowel_arr = ['a', 'e', 'i', 'o', 'u','A', 'E', 'I' , 'O', 'U'];
        	$vowel_arr = [];	//元音字符数组	Array([0] => e,[1] => o)
            $vowel_index_arr = [];	//元音字符下标数组	Array([0] => 1,[1] => 4)
            $s_arr = [];			//输入的字符串数组	Array([0] => h,[1] => e,[2] => l,[3] => l,[4] => o)
            // 先提取字符串的元音字符,并以原索引下标做键
            for($i = 0; $i < strlen($s); $i++){
                if(in_array($s[$i], $base_vowel_arr)){
                    $vowel_arr[] = $s[$i];
                    $vowel_index_arr[] = $i;
                }
                $s_arr[] = $s[$i];
            }			
            //反转下标数组(array_reverse — 返回单元顺序相反的数组)
            $re_vowel_index_arr = array_reverse($vowel_index_arr);	//Array([0] => 4,[1] => 1)
            $vowel_arr_new = [];	//Array([4] => e,[1] => o)
            //将元音字符数组的键值反转进行
            foreach($vowel_arr as $key => $value){
                $temp = $re_vowel_index_arr[$key];
                $vowel_arr_new[$temp] = $value;
            }
            //替换对应元素
            $ress = array_replace($s_arr, $vowel_arr_new);	
            return implode('',$ress);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    方法二:双指针

    function reverseVowels($s) {
        $s_arr = str_split($s); //字符串转化成数组方便操作
        $left = 0;  //左指针
        $right = count($s_arr) - 1; //右指针
        $string = 'aeiouAEIOU'; //判断是否元音的字符串
        while($left < $right){
            if(strpos($string, $s_arr[$left]) !== false && strpos($string, $s_arr[$right]) !== false){
                list($s_arr[$left], $s_arr[$right]) = [$s_arr[$right], $s_arr[$left]];  //都是元音,直接交换
                $left++;
                $right--;
            }else if(strpos($string, $s_arr[$left]) !== false){
                $right--;
            }else if(strpos($string, $s_arr[$right]) !== false){
                $left++;
            }else{
                $left++;
                $right--;
            }
    
        }
        return implode('',$s_arr);  //再将数组转化成字符串返回
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    参考:
    作者:ifelse
    链接:https://leetcode.cn/problems/reverse-vowels-of-a-string/solutions/474520/phpdui-zhuang-zhi-zhen-by-mek1986/
    来源:力扣(LeetCode)

  • 相关阅读:
    [附源码]Python计算机毕业设计Django拉勾教育课程管理系统
    多路转接IO模型(poll和epoll)
    用Vite从零到一创建React+ts项目
    深度学习计算 - 参数管理
    物联网IOT 固件升级
    11.3SpringMVC
    跨境商城源码可以支持多种支付方式吗?
    PHP代码审计系列(二)
    【Prometheus】将windows_exporter注册为系统服务
    AQS层层剖析
  • 原文地址:https://blog.csdn.net/weixin_43741253/article/details/134514718