leetcode-数组-345.-反转字符串中的元音字母

154 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情

Hi, 大家好。我是新人,程序员库里。

今后会按类分享算法题。

今天给大家分享第11道leetcode上数组中使用双指针相关的算法题。

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

leetcode地址:leetcode-cn.com/problems/re…

难度

简单

描述

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

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

 

示例1

输入: s = "hello"
输出: "holle"

示例2

输入: s = "leetcode"
输出: "leotcede"

解法一

  1. 采用指针对撞的方法
  2. 先定义变量word,值是包括元音的大写字母和小写字母
  3. 定义变量arr,值是将字符串s转成数组
  4. 定义左指针left,初始值指向数组第一位
  5. 定义右指针,初始值指向数组最后一位
  6. 开始while循环,满足的条件是left小于right
  7. 当word中含有左指针指向的元素并且word中含有右指针指向的元素,此时将左指针和右指针指向的元素交换,交换后,将左指针向右移动一位,将右指针向右移动一位
  8. 当word中不含有左指针指向的元素,说明左指针指向的元素不是元音,将左指针向右移动一位,看下一个值是否是元音
  9. 当word中不含有右指针指向的元素,说明右指针指向的元素不是元音,将右指针向左移动一位,看下一个值是否是元音
  10. 遍历完后,数组中的元音交换完位置了
  11. 最后将数组转换为字符串返回

代码

/**
 * @param {string} s
 * @return {string}
 */

var reverseVowels = function(s) {
    let word = "aeiouAEIOU";
    let res = s.split("")
    let left = 0 ,right = s.length-1;
    while(left < right){
        if(word.includes(res[left]) && word.includes(res[right])){
            [res[left], res[right]] = [res[right], res[left]]
            left++
            right--
        }
        if(!word.includes(res[left])){
            left++
        }else if(!word.includes(res[right])){
            right--
        }
    }
    return res.join('');
};