带你读《图解算法小抄》十九、双指针(5)

简介: 带你读《图解算法小抄》十九、双指针(5)

带你读《图解算法小抄》十九、双指针(4)https://developer.aliyun.com/article/1348031?groupCode=tech_library


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

1问题描述:

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

 

示例:

输入:"hello"

输出:"holle"

 

注意:

元音字母不包含字母"y"。

2解题步骤:

  • 设置两个指针,一个在开头,一个在末尾。开头的指针称为左指针,末尾的指针称为右指针。
  • 遍历字符串,如果左指针指向的字符不是元音字母,左指针向右移动;如果右指针指向的字符不是元音字母,右指针向左移动。
  • 当左右指针都指向元音字母时,交换两个指针指向的元素,然后左指针右移一位,右指针左移一位。
  • 重复步骤 2 和 3,直到左指针大于或等于右指针,此时所有的元音字母已经反转,算法结束。

3解题框架:

function reverseVowels(s) {
    let vowels = 'aeiouAEIOU';
    let chars = Array.from(s);
    let left = 0, right = s.length - 1;
    while (left < right) {
        if (!vowels.includes(chars[left])) {
            left++;
            continue;
        }
        if (!vowels.includes(chars[right])) {
            right--;
            continue;
        }
        let temp = chars[left];
        chars[left++] = chars[right];
        chars[right--] = temp;
    }
return chars.join('');
}

7.无重复字符的最长子串

1问题描述:

给定一个字符串,找出不含有重复字符的最长子串的长度。

示例:

输入: "abcabcbb"

输出: 3

 

解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

2解题步骤:

  • 建立一个哈希表(JavaScript中可以使用一个对象),用来保存每个字符和它的索引。
  • 设置两个指针,一个快指针用来遍历整个字符串,一个慢指针用来标记无重复字符子串的起始位置。
  • 在遍历字符串的过程中,当遇到重复字符时,将慢指针移动到重复字符的下一个位置。注意,慢指针只能向前移动,不能后退。
  • 每次移动快指针后,都计算一次最大的无重复字符子串的长度。
  • 当快指针遍历完整个字符串后,返回最大的无重复字符子串的长度。

3解题框架:

function lengthOfLongestSubstring(s) {
    let map = {};
    let longest = 0;
    let start = 0;
    let i = 0;    while (i < s.length) {
        let char = s[i];
        if (map[char] !== undefined) {
            start = Math.max(start, map[char] + 1);
        }
        map[char] = i;
        longest = Math.max(longest, i - start + 1);
        i++;
}
    return longest;
}


相关文章
|
11天前
|
算法
双指针算法
双指针算法
9 2
|
27天前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
2月前
|
算法
【优选算法】——双指针——15. 三数之和
【优选算法】——双指针——15. 三数之和
【优选算法】——双指针——15. 三数之和
|
2月前
|
存储 人工智能 算法
c++算法学习笔记 (9) 双指针
c++算法学习笔记 (9) 双指针
|
2月前
|
算法
[优选算法]——双指针——Leetcode——1089. 复写零
[优选算法]——双指针——Leetcode——1089. 复写零
|
17天前
|
算法
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
|
17天前
|
算法 容器
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
|
2月前
|
算法 前端开发 JavaScript
< 每日算法:一文带你认识 “ 双指针算法 ” >
`双指针`并非指的是一种具体的公式或者范式。而是一种运算思路,用于节省逻辑运算时间的`逻辑思路`!双指针算法通常用于`优化时间复杂度`!
< 每日算法:一文带你认识 “ 双指针算法 ” >
|
2月前
|
存储 算法 容器
算法:双指针
算法:双指针
25 3
|
2月前
|
算法 C++
【优选算法】——双指针——18. 四数之和
【优选算法】——双指针——18. 四数之和