乐趣区

关于算法:2124检查是否所有-A-都在-B-之前-算法leetode附思维导图-全部解法300题

零 题目:算法(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 历史文章 – 总览

2 博主简介

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

退出移动版