【我的leetcode日记】345. 反转字符串中的元音字母——js

82 阅读1分钟

仅记录自己刷题过程,顺便督促自我学习~

来源链接:leetcode.cn/problems/re…

简单

题目描述

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

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

示例 1:

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

示例 2:

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

提示:

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

我的实现

  var reverseVowels = function (s) {
        let srr=s.split('')
        let arr = ["a", "e", "i", "o", "u", "A", "E", "I", "O", "U"];
        for (let i = 0, j = srr.length - 1; i < j; ) {
          if (!arr.includes(srr[i])) {
            i++;
          }
          if (!arr.includes(srr[j])) {
            j--;
          }
          if (arr.includes(srr[i]) && arr.includes(srr[j])) {
            [srr[i], srr[j]] = [srr[j], srr[i]];
            i++;j--
          }
        }
        return srr.join('');
      };

官方实现

思路都是双指针,记录下Array.form的用法

var reverseVowels = function(s) {
    const n = s.length;
    const arr = Array.from(s);
    let i = 0, j = n - 1;
    while (i < j) {
        while (i < n && !isVowel(arr[i])) {
            ++i;
        }
        while (j > 0 && !isVowel(s[j])) {
            --j;
        }
        if (i < j) {
            swap(arr, i, j);
            ++i;
            --j;
        }
    }
    return arr.join('');
}

const isVowel = (ch) => {
    return "aeiouAEIOU".indexOf(ch) >= 0;
}

const swap = (arr, i, j) => {
    const temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}