【力扣】345.反转字符串中的元音字母|每日一题|刷题打卡

112 阅读1分钟

一、题目描述

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

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

 

示例 1:

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

示例 2:

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

 

提示:

  • 1 <= s.length <= 3 * 105
  • s 由 可打印的 ASCII 字符组成

二、思路分析

  1. 利用双指针,分别指向头和尾,先判断“头”是否是元音,如果不是,则i++;
  2. 如果“头”是元音,则判断“尾”是否是元音,如果不是,则j--;
  3. 如果“尾”也是元音,则交换它们的位置即可,随后i++、j--;

三、代码答案

var reverseVowels = function (s) {
  const vowel = ['a', 'e', 'i', 'o', 'u']
  s = s.split('')
  let i = 0, j = s.length - 1;
  while (j > i) {
    if (vowel.includes(s[i].toLocaleLowerCase())) {
      let temp = s[i]
      if (vowel.includes(s[j].toLocaleLowerCase())) {
        s[i] = s[j]
        s[j] = temp
        i++
        j--
      } else {
        j--
      }
    } else {
      i++
    }
  }
  return s.join('')
};
  • 优化版本
var reverseVowels = function (s) {
  s = s.split('')
  let i = 0, j = s.length - 1;
  while (j > i) {
    if (isVowel(s[i])) {
      let temp = s[i]
      if (isVowel(s[j])) {
        s[i] = s[j]
        s[j] = temp
        i++
        j--
      } else {
        j--
      }
    } else {
      i++
    }
  }
  return s.join('')
};

function isVowel(input) {
  return "aeiouAEIOU".indexOf(input) !== -1
}