345.反转字符串中的元音字母
链接:345.反转字符串中的元音字母
难度:Easy
标签:双指针、字符串
简介:编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
题解 1 - typescript
- 编辑时间:2021-08-19
- 执行用时:96ms
- 内存消耗:45.4MB
- 编程语言:typescript
- 解法介绍:优化内存。
function reverseVowels(s: string): string {
  const idxList: number[] = [];
  const set = new Set(['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']);
  for (let i = 0; i < s.length; i++) if (set.has(s[i])) idxList.push(i);
  let ans = '';
  for (let i = 0, pos = idxList.length - 1; i < s.length; i++) {
    if (set.has(s[i])) ans += s[idxList[pos--]];
    else ans += s[i];
  }
  return ans;
}
题解 2 - javascript
- 编辑时间:2020-04-07
- 执行用时:120ms
- 内存消耗:44.6MB
- 编程语言:javascript
- 解法介绍:构建元音集合进行倒序。
/**
 * @param {string} s
 * @return {string}
 */
var reverseVowels = function (s) {
  const vowels = new Set(['a', 'e', 'i', 'o', 'u']);
  let result = [...s];
  let tempNum = [];
  let tempStr = [];
  for (let i = 0, len = s.length; i < len; i++) {
    if (vowels.has(s[i].toLowerCase())) {
      tempNum.push(i);
      tempStr.push(s[i]);
    }
  }
  tempNum = tempNum.reverse();
  for (const [index, num] of tempNum.entries()) {
    result.splice(num, 1, tempStr[index]);
  }
  return result.join('');
};
题解 3 - typescript
- 编辑时间:2021-08-19
- 执行用时:180ms
- 内存消耗:45.2MB
- 编程语言:typescript
- 解法介绍:优化内存。
function reverseVowels(s: string): string {
  const set = new Set(['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']);
  let l = 0;
  let r = s.length - 1;
  while (l < r) {
    if (set.has(s[r]) && set.has(s[l])) {
      s = s.substring(0, l) + s[r] + s.substring(l + 1, r) + s[l] + s.substring(r + 1);
      l++;
      r--;
    }
    if (!set.has(s[l])) l++;
    if (!set.has(s[r])) r--;
  }
  return s;
}
题解 4 - typescript
- 编辑时间:2021-08-19
- 执行用时:88ms
- 内存消耗:46.3MB
- 编程语言:typescript
- 解法介绍:逐个判断并反向取值。
function reverseVowels(s: string): string {
  const idxList: number[] = [];
  const set = new Set(['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']);
  for (let i = 0; i < s.length; i++) if (set.has(s[i])) idxList.push(i);
  const idxSet = new Set(idxList);
  let ans = '';
  for (let i = 0, pos = idxList.length - 1; i < s.length; i++) {
    if (idxSet.has(i)) ans += s[idxList[pos--]];
    else ans += s[i];
  }
  return ans;
}