美文网首页
2124、检查是否所有 A 都在 B 之前 | 算法(leeto

2124、检查是否所有 A 都在 B 之前 | 算法(leeto

作者: 码农三少 | 来源:发表于2022-02-19 12:20 被阅读0次

零 标题:算法(leetode,附思维导图 + 全部解法)300题之(2124)检查是否所有 A 都在 B 之前

一 题目描述

题目描述
题目描述

二 解法总览(思维导图)

思维导图

三 全部解法

1 方案1

1)代码:

// 方案1 “排序、对比法”。

// 思路:
// 1)将 s 按字母升序排列,得到字符串 sSort 。
// 2)返回结果 sSort === s 。
var checkString = function(s) {
    // 1)将 s 按字母升序排列,得到字符串 sSort 。
    const sSort = s.split('').sort((a, b) => a.localeCompare(b)).join('');
    
    // 2)返回结果 sSort === s 。
    return sSort === s;
};

2 方案2

1)代码:

// 方案2 “双指针法”。

// 思路:
// 1)状态初始化,left = 0, right = l - 1, resBool = true 。

// 2)当 left < right 时,下标 left、right 不断往中间靠。
// 2.1)若 leftVal(即 s[left]) 等于 'a',则 下标left 往后走。
// 2.2)若 rightVal(即 s[right]) 等于 'b',则 下标right 往前走。
// 2.3)若 leftVal 不等于 'a' 且 rightVal 不等于 'b',则 resBool 置为 false,退出 while 循环。

// 3)返回结果 resBool 。
var checkString = function(s) {
    // 1)状态初始化,left = 0, right = l - 1, resBool = true 。
    const l = s.length;
    let left = 0,
        right = l - 1,
        resBool = true;
    
    // 2)当 left < right 时,下标 left、right 不断往中间走。
    while (left < right) {
        const leftVal = s[left],
            rightVal = s[right];
        
        // 2.1)若 leftVal(即 s[left]) 等于 'a',则 下标left 往后走。
        if (leftVal === 'a') {
            left++;
        }
        // 2.2)若 rightVal(即 s[right]) 等于 'b',则 下标right 往前走。
        if (rightVal === 'b') {
            right--;
        }
        // 2.3)若 leftVal 不等于 'a' 且 rightVal 不等于 'b',则 resBool 置为 false,退出 while 循环。
        if (leftVal !== 'a' && rightVal !== 'b') {
            resBool = false;
            break;
        }
    }

    // 3)返回结果 resBool 。
    return resBool;
}

3 方案3

1)代码:

// 方案3 “问题等价 - 转化法”。

// 技巧:通过 进一步揣摩题目意思,可以将原问题 转换成 “给定的字符串中 是否不存在 'ba'子串 ” 。
var checkString = function(s) {
    return s.includes('ba') === false;
}

4 方案4

1)代码:

// 方案4 “问题等价 - 转化法(正则实现,初步看、速度会比方案3快好些~)”。
// 技巧:通过 进一步揣摩题目意思,可以将原问题 转换成 “给定的字符串中 是否不存在 'ba'子串 ” 。
var checkString = function(s) {
    const reg = /ba/;

    return reg.test(s) === false;
}

四 资源分享 & 更多

1 历史文章 - 总览

历史文章 - 总览 刷题进度 - LeetCode:430 / 2520 、《剑指offer》:66 / 66

2 博主简介

码农三少 ,一个致力于编写 极简、但齐全题解(算法) 的博主。
专注于 一题多解、结构化思维 ,欢迎一起刷穿 LeetCode ~

相关文章

  • 2124、检查是否所有 A 都在 B 之前 | 算法(leeto

    零 标题:算法(leetode,附思维导图 + 全部解法)300题之(2124)检查是否所有 A 都在 B 之前 ...

  • 2019-01-29 随机梯度下降中学习速率α

    确保算法能收敛以及选择合适的学习速率α。 对于随机梯度下降算法,为了检查算法是否收敛,沿用之前定义的cost函数。...

  • Linux设置免密登录

    以下所有操作基于CentOS 7,本地为A,服务器为B 首先,登录服务器B,按照以下操作进行: 检查是否已经关闭了...

  • 拓扑结构相同子树练习题

    题目 对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。 给定...

  • 判断树A是否为另一树B的子结构

    题目的意思: 首先直观的想到,我们先在A中找到B的根节点,然后递归的检查B所有的节点是否在A中相同的位置: 这个函...

  • 数据结构错题收录(二十二)

    1、在下列算法中,()算法可能出现下列情况:在最后一趟开始之前,所有元素都不在最终位置上。 A:堆排序 B:冒泡排...

  • 问题:寻找拓扑结构相同的子树

    对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。思路:前序遍...

  • 【孕22周】大排畸流程是怎样的?

    整个怀孕期间,会做非常多的检查。其中大部分的检查都是用于检查宝宝是否正常发育、是否存在畸形,包括NT检查(B超)、...

  • 给孩子减负

    之前我所有的调焦点都在孩子的喝水上,生怕孩子喝水少了,生病。每天放学后的第一件事情就是回去检查孩子的水是否喝完了。...

  • 给孩子减负

    之前我所有的调焦点都在孩子的喝水上,生怕孩子喝水少了,生病。每天放学后的第一件事情就是回去检查孩子的水是否喝完了。...

网友评论

      本文标题:2124、检查是否所有 A 都在 B 之前 | 算法(leeto

      本文链接:https://www.haomeiwen.com/subject/chzmlrtx.html