88 - 反转字符串中的元音字母

题目

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

示例 1:

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

示例 2:

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

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

解答

双指针?遇到了换个位置?

如果保留字符串的话,要用到splice再join,感觉很烦。不如打散成数组,对换也容易,最后拼起来就行了

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

Runtime: 84 ms, faster than 45.35% of JavaScript online submissions for Reverse Vowels of a String.

Memory Usage: 38.4 MB, less than 92.86% of JavaScript online submissions for Reverse Vowels of a String.

虽然通过了,但感觉这个做法有点挫。。做了一些无用功。。

Runtime: 8 ms, faster than 31.58% of Go online submissions for Reverse Vowels of a String.

Memory Usage: 4.6 MB, less than 66.67% of Go online submissions for Reverse Vowels of a String.

把map的true换成int,内存就会多1mb

Runtime: 8 ms, faster than 31.58% of Go online submissions for Reverse Vowels of a String.

Memory Usage: 4.7 MB, less than 66.67% of Go online submissions for Reverse Vowels of a String.

参考了这个题解,用切片和strings包试试看:

Runtime: 4 ms, faster than 81.95% of Go online submissions for Reverse Vowels of a String.

Memory Usage: 4.5 MB, less than 66.67% of Go online submissions for Reverse Vowels of a String.

巨快。。

比哈希表还快,不知道这个strings的containsRune是怎么实现的。。

Last updated

Was this helpful?